Как динамически создать новый класс, реализующий некоторый интерфейс и создать его экземпляр?
Можно ли создать новый класс во время выполнения в Java?
Каковы средства для этого? Трапеза? API компилятора?
я могу сделать
package tests;
public class TryReflection02 {
interface A {
}
public static void main(String[] args) {
Object o = new A() {};
System.out.println( o.toString() );
o = A.class.newInstance() // exception
}
}
Могу ли я сделать то же самое, имея A.class
значение?
1 ответ
Нет, ты не можешь. A
интерфейс, и только классы могут быть созданы.
Что вы можете сделать, это использовать библиотеку / помощник, который использует некоторые хитрости для создания класса, который реализует интерфейс и создает его. JDK's Proxy
класс содержит статические методы для этого. Есть также инструменты, которые могут это сделать, которые специально предназначены для случаев использования, связанных с тестированием: например, mockito.
Эти инструменты делают именно то, на что вы намекаете в заголовке этого вопроса: вместо того, чтобы создавать экземпляр интерфейса, они генерируют новый класс, который реализует интерфейс, а затем создают экземпляр этого класса.