3

我正在使用 spring 并尝试向 Entity-Bean 添加自定义注释。我想要做的就是通过反射访问带有自定义注释@runtime 的字段。问题是,尽管字段上有多个 Annotation,但在运行时都无法访问它们:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface ChangeableField {

}

实体:

public class Order {

    @NotNull
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(pattern = "dd:MM:yyyy HH:mm")
    @ChangeableField
    private Date scheduledStart;

    @NotNull
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(pattern = "dd:MM:yyyy HH:mm")
    @ChangeableField
    private Date scheduledEnd;

    //...
}

我完全不知道该怎么做

Order.class.getField("scheduledStart").getAnnotation(ChangableField.class);

返回始终为空。(顺便说一句,此字段上所有声明的注释均为空)

或许和春天有关?

我将不胜感激任何帮助!

提前致谢

编辑

我不知道为什么,但现在它工作正常:

for (Field currentField : order.getClass().getDeclaredFields()) {
    if (currentField.getAnnotation(ChangeableField.class) != null
    && map.containsKey(currentField.getName())) {
         //..

谢谢你的帮助

顺便说一句,这里的这篇文章只是一个错字..

4

2 回答 2

2

试试这个:

Order.class
     .getDeclaredField("scheduledStart")
     .getAnnotation(ChangableField.class);

Class.getField(fieldname)检索类和所有超类的公共字段。您的字段是私有的,因此您需要Class.getDeclaredField(fieldname)检索所有可见性的字段,但仅限于此类。

于 2011-10-21T08:57:18.897 回答
0

您的注释属于“ChangeableField”类,但您正在检索“ChangableField”(注意缺少的“e”)。这只是帖子中的错字,还是您没有检索到您认为的内容?

于 2011-10-21T08:56:25.010 回答