最後のコードはコンパイルエラーを生成します:
NotApplicable.java:7: run() in cannot be applied to (int)
run(42);
^
1 error
問題はなぜですか?javacがrun()を呼び出していると考え、run(int bar)が見つからないのはなぜですか?正しくfoo(int bar)と呼ばれていました。NotApplicable.this.run(42);を使用する必要があるのはなぜですか?バグですか?
public class NotApplicable {
public NotApplicable() {
new Runnable() {
public void run() {
foo(42);
run(42);
// uncomment below to fix
//NotApplicable.this.run(42);
}
};
}
private void run(int bar) {
}
public void foo(int bar) {
}
}