のJavadocからClass.getField(...)
:
この Class オブジェクトによって表されるクラスまたはインターフェイスの指定されたパブリック メンバー フィールドを反映する Field オブジェクトを返します。name パラメータは、目的のフィールドの単純な名前を指定する文字列です。反映されるフィールドは、次のアルゴリズムによって決定されます。このオブジェクトが表すクラスを C とします。
C が指定された名前でパブリック フィールドを宣言する場合、それが反映されるフィールドです。上記のステップ 1 でフィールドが見つからなかった場合、このアルゴリズムが C の各直接スーパーインターフェースに再帰的に適用されます。直接スーパーインターフェースは、宣言された順序で検索されます。上記の手順 1 と 2 でフィールドが見つからず、C にスーパークラス S がある場合、このアルゴリズムは S に対して再帰的に呼び出されます。C にスーパークラスがない場合は、NoSuchFieldException がスローされます。Java 言語仕様のセクション 8.2 および 8.3 を参照してください。
次の方法で取得しようとしているフィールドの場合:
studyplanCategory.getClass().getField(filterProperty)
が非公開の場合は、NoSuchFieldException
. プライベート フィールドの場合は、代わりにこれを試してください。
studyplanCategory.getClass().getDeclaredField(filterProperty)
そして、この方法でフィールドを介して値を設定するときに潜在的な不正なアクセス例外を回避するには:
Field field = studyplanCategory.getClass().getDeclaredField(filterProperty);
field.setAccessible(true);
field.get(studyplanCategory);