man*_*nta 6 java reflection annotations supertype
我试图使用反射从超类型引用变量获取注释细节,以使该方法接受所有子类型.但isAnnotationPresent()回来了false.与其他注释相关的方法相同.如果在确切类型上使用,则输出符合预期.
我知道,即使我通过超类型引用,也可以在对象上获得注释信息.
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface Table {
String name();
}
@Table(name = "some_table")
public class SomeEntity {
public static void main(String[] args) {
System.out.println(SomeEntity.class.isAnnotationPresent(Table.class)); // true
System.out.println(new SomeEntity().getClass().isAnnotationPresent(Table.class)); // true
Class<?> o1 = SomeEntity.class;
System.out.println(o1.getClass().isAnnotationPresent(Table.class)); // false
Class<SomeEntity> o2 = SomeEntity.class;
System.out.println(o2.getClass().isAnnotationPresent(Table.class)); // false
Object o3 = SomeEntity.class;
System.out.println(o3.getClass().isAnnotationPresent(Table.class)); // false
}
}
Run Code Online (Sandbox Code Playgroud)
如何获取注释信息?
Jon*_*eet 18
你叫getClass() 上一个Class<?>,这将给Class<Class>.现在Class它本身没有注释,这就是为什么你会变得虚假.我想你想要:
// Note no call to o1.getClass()
Class<?> o1 = SomeEntity.class;
System.out.println(o1.isAnnotationPresent(Table.class));
Run Code Online (Sandbox Code Playgroud)