Вы не можете создать экземпляр класса, который не указан полностью.
Чтобы проиллюстрировать, вызов newInstance()
для класса типа Class<Object>
определенно создаст объект, но вызов newInstance()
для класса типа Class<?>
заставит компилятор задуматься, какой класс из всей вселенной возможности, которые он должен построить.
То, что вы немного сузили поле, указав, что вместо ?
вам нужен ?
, расширяющий Annotation
, не означает, что вы на самом деле назвали определенный класс для создания. ? extends Annotation
просто означает «некоторый класс, который расширяет Annotation
». Без указания точного класса ClassLoader не может определить, какой конструктор вызывать, поскольку нет ограничения на количество классов, которые могут расширяться Annotation
.
EasyMock не создает экземпляры интерфейсов. Я не знаком с фреймворком, но он, вероятно, создает экземпляры java.lang.Object (s), которые расширяют желаемый интерфейс, или он создает какой-то класс "закулисного" фреймворка, который был сгенерирован с помощью предложения "Implements interface" в определении класса. Интерфейсы не имеют конструктора по умолчанию.