为了理解Java注释,我尝试了一些操作并获得了一些疑惑,即使看着执行,我仍然感到困惑。这是我正在做的。 定义注解反射库是否忽略RetentionPolicy
@Retention(RetentionPolicy.CLASS)
@Target(value=ElementType.TYPE)
public @interface Command {
}
现在我初始化命令
Reflections reflections = new Reflections(CMDS_PACKAGE);
Set<Class<?>> allClasses = reflections.getTypesAnnotatedWith(Command.class); // line 2
for (Class clazz : allClasses) {
MYCommand cmd = (MYCommand) clazz.newInstance();
System.out.println(cmd.getClass().getAnnotation(Command.class));// line 6
log.info("loading Command [ {} ]", clazz.getCanonicalName());
}
当我运行的程序行6个显示null
。 当策略为RetentionPolicy.RUNTIME
时,第6行显示正确的命令。
在这个过程中,第2行仍然给我正确的带注释的类,而不考虑策略。那么这是否意味着Reflection Library忽略了RetentionPolicy
即使阅读了大部分教程,我仍然很困惑。
对我来说问题其实就是这个,为什么这种不同的行为?当用RetentionPolicy.CLASS
策略注释它在运行时不应该给我。我的理解是错误的,还是任何人都可以分享那些对这两者理解的宝贵意见。
好吧,似乎它忽略了它。但是问题是什么? – Holger
@霍尔:谢谢你,我编辑了这个问题了解更多细节。 – chaosguru