我看到 Class 实例具有不同的签名,至少在getAnnotation
方法方面,比较 Class 对象和<some-object>.getClass()
对象。
以下代码显示了一个示例案例。
@Bar("hello")
public class Foo {
public static void main(String[] args) {
Foo foo=new Foo();
Bar bar1,bar2,bar3;
Class clazz=foo.getClass();
//This compiles and work (as expected)
bar1=foo.getClass().getAnnotation(Bar.class);
//This does not compile!
bar2=clazz.getAnnotation(Bar.class);
//This one copiles and work!
bar3=(Bar) clazz.getAnnotation(Bar.class);
}
}
@Retention(RetentionPolicy.RUNTIME)
@interface Bar {
String value();
}
注意:整个示例是从我的编辑器中复制和粘贴的。
--------修改以更好地展示场景
我忘了在示例中显示“代码”不知道 Foo 的存在,例如外部库:
class SomeExternalLibrary{
public static void someMethod(Class clazz){
Bar bar2,bar3;
bar2=clazz.getAnnotation(Bar.class);
//This one copiles and work!
bar3=(Bar) clazz.getAnnotation(Bar.class);
}
}
使用这个外部库的代码是这样的:
SomeExternalLibrary.someMethod(Foo.class);
很抱歉没有那么清楚我的场景现实:-)