更新:これは多かれ少なかれ重複であり、 build2でローカル変数を渡すためのコンストラクターを追加するコンパイラーマジックであることが判明しました。
そのようなインターフェースを考えると:
public interface IFoo {
public int get();
}
以下のコードは、build2によって返された値に対してgetClass()。newInstance()を呼び出そうとすると、1、1、2を出力し、例外をスローしますが、build1の戻り値に対して同じものを呼び出そうとすると例外をスローします。なぜ何かアイデアはありますか?
public class Foo {
public static IFoo build1() {
return new IFoo() { public int get() { return 1; } };
}
public static IFoo build2(final int v) {
return new IFoo() { public int get() {return v;} };
}
public static void main(String[] args) throws Exception {
IFoo foo, bar;
foo = build1();
System.out.println(foo.get());
bar = foo.getClass().newInstance();
System.out.println(bar.get());
foo = build2(2);
System.out.println(foo.get());
bar = foo.getClass().newInstance();
System.out.println(bar.get());
}
}
私のデバッガーは、newInstance()呼び出しで、getConstructor0がNoSuchMethodExceptionをスローしていることを示しています。