は、私は次のコードを持っている:外部クラスのコンストラクタで匿名クラスをインスタンス化できますか?
public class Outer {
public Interface Anony {
public void callback();
}
public Outer() {
OtherClass.foo(new Anony() {
@Override
public void callback() {
....
}
});
}
}
をしかし、私の友人はそれでいくつかの問題があることを教えてくれました。私はOuterのコンストラクタに匿名クラスインスタンスを作成したので、匿名クラスインスタンスはOuterクラスインスタンス、つまりOuter.thisを暗黙的に参照しています。しかし、現時点では、Outerクラスのインスタンスはまだ完全には作成されていません。したがって、匿名クラスインスタンスは、不完全な状態のオブジェクトを参照します。したがって、問題です。
彼は正しいですか?ありがとう。
Anonyはインターフェイスであり、クラスではありません! – zEro
はい、新しいAnony(){...}は匿名クラスインスタンスを作成しました。右。 – Kai
@zEroはい、 'Anony'はインターフェースですが、インターフェースを実装する匿名クラスのインスタンスを作成するための構文です。同じ構文は、別のクラスを拡張する匿名クラスのインスタンスをインスタンス化するときに使用されます。 – jpmc26