gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:32:05 24 4
gpt4 key购买 nike

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

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/

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