Обновление : это более или менее дублирование , и оказывается, что это волшебство компилятора, добавляющее конструктор для передачи локальной переменной в build2.
Имеется такой интерфейс:
public interface IFoo {
public int get();
}
Приведенный ниже код печатает 1, 1, 2, а затем выдает исключение при попытке вызвать getClass (). NewInstance () для значения, возвращаемого build2, но не при вызове этого же для возвращенного значения 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.