java - 在构造函数中获取child的注解值

标签 java reflection annotations

我正在尝试在抽象父类的构造函数中获取子类的注释。

public abstract class Skill {
private String identifier;

public Skill(){
    identifier = getClass().getAnnotation(SerializableAs.class).value();
}
...
}

child 看起来像这样:

@SerializableAs("TestSkill")
public class TestSkill extends Skill { ... }

显然上面的代码返回了一个 NPE,因为 getAnnotation 为 Skill 返回 null,但是有没有办法从 child 那里获取注释?

由于 SerializableAs 如何参与系统的其他基本部分以及我如何创建 TestSkill 的新实例(通过动态 jar 加载/反射),我想避免在构造函数中使用参数。我还想验证 SerializableAs 是否与标识符完全相同。

有办法吗?

谢谢

编辑:这是我使用的 SerializeAs 注释的链接: https://github.com/Bukkit/Bukkit/blob/master/src/main/java/org/bukkit/configuration/serialization/SerializableAs.java

编辑:找到了,我很笨,它按预期工作。谢谢!

最佳答案

不要忘记用

注释你的注释
@Retention(RetentionPolicy.RUNTIME)

这将使它在运行时可用(通过反射)。

I also want to verify that the SerializableAs is exactly the same as the identifier.

您必须在运行时自行验证 value() 返回的值。


请注意,您的代码中没有任何内容强制 Skill 的实现具有注释。有人可以制作一个没有它的子类型。您应该考虑到这一点,并可能将您的逻辑移到其他地方或更改逻辑以同时执行 null 检查。

关于java - 在构造函数中获取child的注解值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20735079/

相关文章:

java - 以下代码行

java - 如何使用另一个类中的 int,更改它并返回原始类中更改后的 int

c# - 使用反射动态调用 WCF 服务

swift - 使用 PDFKit 删除突出显示注释

java - JFrame 的组件仅在调整大小后才位于正确的位置(有时)

c# - 使用 Razor/MVC3 将 AssemblyVersion 放入网页时出现问题

java - 查找运行 Main 的子类名称

hibernate - 为什么 hibernate 在映射多对多关系时会生成额外的实体?

java - Java中如何通过反射获取方法参数的值?

java - 左右对象在运行时或编译时评估/解决?