Как динамически создать новый класс, реализующий некоторый интерфейс и создать его экземпляр?

Можно ли создать новый класс во время выполнения в 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.

Эти инструменты делают именно то, на что вы намекаете в заголовке этого вопроса: вместо того, чтобы создавать экземпляр интерфейса, они генерируют новый класс, который реализует интерфейс, а затем создают экземпляр этого класса.

Другие вопросы по тегам