Java 为什么getTypesAnnotatedWith返回没有注释的类
我试图在Java中使用类注释,我有一种奇怪的行为,Java 为什么getTypesAnnotatedWith返回没有注释的类,java,reflection,annotations,reflections,Java,Reflection,Annotations,Reflections,我试图在Java中使用类注释,我有一种奇怪的行为,getTypesAnnotatedWith返回一个类,在该类上getAnnotation返回null 有什么原因吗getTypesAnnotatedWith返回不带注释的类? 例如,在我的项目中,以下代码段(正确地)返回我注释的一个类: new Reflections("my.nice.package") .getTypesAnnotatedWith(MyTag.class) .iterator().next(); 但是,如果我
getTypesAnnotatedWith
返回一个类,在该类上getAnnotation
返回null
有什么原因吗getTypesAnnotatedWith
返回不带注释的类?
例如,在我的项目中,以下代码段(正确地)返回我注释的一个类:
new Reflections("my.nice.package")
.getTypesAnnotatedWith(MyTag.class)
.iterator().next();
但是,如果我对其调用getAnnotation
,结果是null
:
new Reflections("my.nice.package")
.getTypesAnnotatedWith(MyTag.class)
.iterator().next()
.getAnnotation(MyTag.class));
这是注释:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyTag {
public String value();
}
为了完整起见,我是这样注释类的:
@MyTag("FooBar")
class MyClass {
// ...
}
您的示例对我来说很好,这可能是因为我有一个更复杂的场景,通过反射调用一个动态加载的jar。我将investigate@Federico你弄明白了吗?我也有同样的问题。在Maven构建过程中,我通过URLClassLoader加载这些类。我找到了所有的类,但没有一个注释是真的存在的。@mhradek我想这个错误在我使用的自定义类加载器中,但我不记得确切的细节…@Federico谢谢你的回复。答案是像这样指定当前线程:
loader=newurlclassloader(classurl,thread.currentThread().getContextClassLoader())代码>如下所述: