我写了一个注释:
@Documented
@Retention(RUNTIME)
@Target(TYPE)
/**
* @author christian
*
*/
public @interface HeraklesObject {
}
我在成捆的osgi环境中(用tyty遮盖氧气)使用它。 在另一个捆绑包中(具体来说是一个测试片段),我使用以下方法检查第一个捆绑包中的类是否有此注释:
class.getAnnotation(HeraklesObject.class)
我确定所查询的类具有此批注,但结果始终为空。
保留策略对我来说似乎是正确的,但是我不确定是否存在类加载器问题,并且我不知道如何检查。还是看到其他原因?谢谢 基督徒
答案 0 :(得分:0)
尝试使用
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE })
也来自How to get class annotation in java?
使用
Class newClass = X.class;
for (Annotation annotation : newClass.getDeclaredAnnotations()) {
System.out.println(annotation.toString());
}
答案 1 :(得分:0)
您要检查其运行时批注的类的包是否包含或导入带有HeraklesObject批注类的包?
类加载器将加载一个类,如果运行时注释类的类不可见,则忽略该注释。因此,您最终会遇到无声的“失败”。因此,请检查以确保包含运行时注释的包对包含带注释的类的包可见。
如果您使用Bnd生成捆绑包,则它应正确导入运行时批注的包。