80

java.lang.NoSuchFieldException次のメソッドを実行しようとすると、エラーが発生します。

 public void getTimes(String specialty, String day) {
    ArrayList<Tutor> withSpec = new ArrayList<Tutor>();
    for (Tutor t : tutorList){
        try {
            Time startTime = (Time)t.getClass().getField(day + "Start").get(t);
        } catch (NoSuchFieldException | SecurityException | IllegalAccessException ex) Logger.getLogger(DBHandler.class.getName()).log(Level.SEVERE, null, ex); }

エラーは行にありますTime startTime = (Time)t.getClass().getField(day + "Start").get(t);

TutormonStart はクラスのフィールドであるため、このエラーがわかりません。

Public class Tutor implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Column(name = "tutorID")
private Integer tutorID;

.... 

@Column(name = "monStart")
@Temporal(TemporalType.TIME)
 Date monStart;

リフレクションの使い方を学んでいるところなので、これはある種の構文エラーだと確信しています...

4

7 に答える 7

167

このgetFieldメソッドは、フィールドが の場合にのみ検索しますpublic。代わりにメソッドを使用する必要があります。これは、クラスで直接getDeclaredField宣言されているフィールドを検索します。public

于 2013-03-14T22:00:12.340 に答える
11

javadoc によると、 「このオブジェクトが表すクラスまたはインターフェイスの指定されたパブリック メンバー フィールドを反映Class.getField()するオブジェクトを返します」。非パブリック フィールドにアクセスする場合に使用します。FieldClassgetDeclaredField()

于 2013-03-14T22:00:27.883 に答える
2

タイトルに基づいてこの質問にたどり着きました。Android プロジェクトで同じエラー ( NoSuchFieldException) が発生しましたが、別の理由がありました。

したがって、ここに来る他の人にとって、このエラーは、Android Studio でキャッシュが同期されていないことが原因である可能性もあります。[ファイル] > [キャッシュの無効化/再起動...]に移動します。

こちらご覧ください

于 2016-09-13T09:47:15.567 に答える
0

知っておくと便利です...クラスに @Configuration がある場合、 getDeclaredFields() にはフィールドが含まれません。

于 2021-09-01T15:09:58.280 に答える