可搜索.java
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Searchable { }
对象java
public class Obj {
@Searchable
String myField;
}
void main(String[]args(
Annotation[] annotations = Obj.class.getDeclaredField("myField").getAnnotations();
我希望annotations
包含我的@Searchable
。虽然是CCD_ 3。根据文件,这种方法:
返回此元素上存在的所有批注。(如果此元素没有注释,则返回长度为零的数组。(此方法的调用方可以自由修改返回的数组;它对返回给其他调用方的数组没有影响。
这更奇怪(对我来说(,因为它返回的是null
而不是Annotation[0]
。
我在这里做错了什么,更重要的是,我如何才能获得Annotation
?
我刚刚为您测试了这个,它很有效:
public class StackOverflowTest {
@Test
public void testName() throws Exception {
Annotation[] annotations = Obj.class.getDeclaredField("myField").getAnnotations();
System.out.println(annotations[0]);
}
}
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface Searchable {
}
class Obj {
@Searchable
String myField;
}
我运行了它,它产生了以下输出:
@nl.jworks.stackoverflow.Searchable()
你能试着在IDE中运行上面的类吗?我试过IntelliJ,openjdk-6。
您的代码是正确的。问题出在别的地方。我刚刚复制并运行了你的代码,它很有效。
您可能在代码中导入了错误的Obj
类,您可能需要先检查一下。
在我的情况下,我忘记添加
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
对于方法,所以最后它应该看起来像:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
}
在我的例子中,错误出现在我自己的注释中。我修复了几件事,结果是这样的:
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
@Target( { METHOD, FIELD, ANNOTATION_TYPE })
@Retention(RUNTIME)
public @interface MyAnnotation{
}
它现在工作