Field can be converted to a local variableとは
コードを書いていると、時々、変数の名に関して、上記の警告が出ることがあります。
といったように。
これはローカル変数でもよいですよ。という警告です。
以下のようなコードでnumberについて発生します。
public class MainActivity extends AppCompatActivity{ private int number; //Field can be converted to a local variable @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); for(int i = 0;i<10;i++){ logNumber(i); } } private void logNumber(int x){ number = x*2; Log.d("Log0",""+number); } }
なぜでしょうか。
numberはlogNumberでのみ使用されています。上記コードのように最上位に記述する必要はありません。ですからonCreate内でnumberを処理をする場合はこの警告は表示されません。
上図のコードは以下のように書きかえることで警告は消えます。
public class MainActivity extends AppCompatActivity{ //Move to logNumber @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); for(int i = 0;i<10;i++){ logNumber(i); } } private void logNumber(int x){ int number = x*2; //Described here Log.d("Log0",""+number); } }
こちらのほうがすっきりします。読みやすいですし、何より修正も楽です。
ただし、後になって色々と機能を追加する中で同じ目的の変数を重複して定義してしまうことがあるかもしれません。そこは注意が必要です。当サイトでのサンプルコードはこの警告が出やすいかと思います。同じプロジェクトで拡張したりカットをしたりを繰り返しているためです。申し訳ありませんが気になる場合は修正をしてみてください。
ただし、定数などは警告が出てもそのまま扱ったほうが良いかと思います。(finalで定義するようなもの)