我正在使用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())) {
//..谢谢你的帮忙
顺便说一下,这只是这篇文章中的一个打字错误。
发布于 2011-10-21 16:56:25
您的注释属于"ChangeableField“类,但是您检索的是"ChangableField”(注意缺少的"e")。这只是一篇文章中的打字错误,还是你没有找回你认为自己是什么?
发布于 2011-10-21 16:57:19
试试这个:
Order.class
.getDeclaredField("scheduledStart")
.getAnnotation(ChangableField.class);Class.getField(fieldname)检索类和所有超类的公共字段。您的字段是私有的,因此您需要Class.getDeclaredField(fieldname),它检索所有可见性的字段,但仅限于此类。
https://stackoverflow.com/questions/7846938
复制相似问题