是否可以在给定Class ?

我有一个Class Class并尝试调用newInstance()但是Java因为我无法实例化接口的明显原因而对我大吼大叫。 但我知道像EasyMock这样的框架完全能够实例化接口。 从我的Class获取一个完全愚蠢的Annotation实例需要什么?

模拟框架不实例化接口,它们构建在运行时即时实现它们的类。 你可能会发现这个javadoc很有启发性 ,你想做什么!

感谢Affe指出了我正确的方向 – 我会评论他的回答,但后来我无法格式化解决方案:

 注释注释=(注释)Proxy.newProxyInstance(
   clazz.getClassLoader()
   new Class [] {Annotation.class},
   new InvocationHandler(){
     @Override public Object invoke(Object proxy,Method method,Object [] args){
      返回clazz;  //应该只调用getClass()或annotationType()。
     }
   }); 

奇迹般有效。

您无法创建未完全指定的类的实例。

为了说明,在Class类型上调用newInstance()肯定会创建一个Object,但是在Class上调用newInstance()会让编译器想知道整个可能性范围内的哪个类它应该构建。

只是因为你通过指定而不是仅仅缩小了字段而缩小了一点? ,你想要一个? 扩展Annotation并不意味着你实际上已经命名了一个特定的类来构造。 ? extends Annotation ? extends Annotation只是意味着“一些扩展Annotation类”而没有命名确切的类,ClassLoader无法确定要调用哪个构造函数,因为对可能扩展Annotation的类数没有限制。

EasyMock不实例化接口。 我不熟悉该框架,但它可能实例化扩展所需接口的java.lang.Object,或者它实例化某种“幕后”框架类,该框架类是使用“implements interface”子句生成的在类定义中。 接口没有默认构造函数。

如果您在编译时知道注释的类型,则可以创建一个实现注释的类,就像它是一个普通的注释一样。 另见这个答案 。