3

私は春に取り組んでおり、エンティティ Bean にカスタム注釈を追加しようとしました。私がやりたいのは、リフレクションを介して @ runtime というカスタム アノテーションを使用してフィールドにアクセスすることだけです。問題は、フィールドに複数の注釈がありますが、実行時にそれらのどれにもアクセスできないことです:

@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);

常に null を返します。(ところで、このフィールドで宣言されたすべての注釈は null です)

春と関係があるのか​​な。

助けていただければ幸いです。

前もって感謝します

編集

理由はわかりませんが、現在は正常に動作しています。

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 に答える