Java 为什么getTypesAnnotatedWith返回没有注释的类

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(); 但是,如果我

我试图在Java中使用类注释,我有一种奇怪的行为,
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())如下所述: