1. ホーム
  2. java

[解決済み] フィールドが存在する場合の NoSuchFieldException

2023-08-12 14:37:31

質問

私は 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);

このエラーは理解できません。なぜなら monStart は Tutor クラスのフィールドだからです。

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;

リフレクションの使い方を覚えたばかりなので、これは何らかの構文エラーだと思うのですが...。

どのように解決するのですか?

この getField メソッドは、フィールドが public . を使用する必要があります。 getDeclaredField と宣言されているフィールドを見つけることができます。 直接 でない場合でも、クラス上で直接宣言されているすべてのフィールドを見つけます。 public .