gpt4 book ai didi

java - isAnnotationPresent() 在 Java 中与父类(super class)型引用一起使用时返回 false

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:40:16 27 4
gpt4 key购买 nike

我正在尝试使用反射从父类(super class)型引用变量中获取注释详细信息,以使该方法接受所有子类型。但是 isAnnotationPresent() 返回 false。与其他注解相关的方法相同。如果用于确切的类型,则输出符合预期。

我知道注释信息将在对象上可用,即使我通过父类(super class)型引用也是如此。

@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
}
}

如何获取标注信息?

最佳答案

您正在调用 getClass() Class<?> , 这将给出 Class<Class> .现在Class本身没有注释,这就是为什么你会变得错误。我想你想要:

// Note no call to o1.getClass()
Class<?> o1 = SomeEntity.class;
System.out.println(o1.isAnnotationPresent(Table.class));

关于java - isAnnotationPresent() 在 Java 中与父类(super class)型引用一起使用时返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7599006/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com