私はJavaを初めて使用し、数日から基本的なコーディングを行っています。今日、変数と内部クラスを処理しているときに、内部クラスで非最終変数を使用しているときに行き詰まりました。
私は自分の仕事にtestNGフレームワークを使用しているので、これが私が試しているシナリオです。
=========
public class Dummy extends TestNG {
@Override
public void setUp() throws Exception {
log.error("Setup Goes here");
}
@Override
public void test() throws Exception {
String someString = null;
try {
someString = "This is some string";
} catch (Exception e) {
log.error(e.getMessage());
}
Thread executeCommand = new Thread(new Runnable() {
@Override
public void run() {
try {
runComeCommand(someString, false); <=====ERROR LINE
} catch (Exception e) {
log.error(e.getMessage());
}
}
});
}
@Override
public void cleanUp() throws Exception {
}
}
==========
上記のコードを書いたとき、「内部クラスの非最終変数を参照できません」というエラーがスローされました。そこで、eclipsが提供する提案の1つ、つまり親クラスでsomeString変数を宣言することを実装しました。これで、コードは次のようになります。
==========
public class Dummy extends TestNG {
String someString = null; <=====Moved this variable from test() to here
@Override
public void setUp() throws Exception {
log.error("Setup Goes here");
}
@Override
public void test() throws Exception {
<same code goes here>
}
@Override
public void cleanUp() throws Exception {
}
}
==========
これで、日食にエラーは表示されません。私は知りたいのですが、なぜそれが最終的ではないのに内部クラスの変数を受け入れるのか。同じエラーで失敗するべきではありませんか?これは今機能しますか?どんな助けでも素晴らしいでしょう。