我正在尝试在抽象父类的构造函数中获取子类的注释。
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/