私は何かを明確にしたいと思います。
「プレーンな」Java リフレクション手法 (ライブラリを使用しない) では、プライベート フィールド (java.lang.reflect.Field
つまり、フィールド値ではなくオブジェクト) への参照を取得することはできません。
たとえば、このクラスがある場合:
public class MyClass {
private String field1;
}
これを実行しようとすると:
Field field = MyClass.class.getField("field1");
予想通り、NoSuchFieldException
例外が発生します。
Guava Reflection ライブラリを使用して、これを実行しようとすると:
Object o = new MyClass();
Property property = Properties.getPropertyByName(o, "field1");
Field f = property.getField();
次の例外が発生します。
java.lang.IllegalStateException: Unknown property: field1 in class MyClass
そして、これも予想されていました。ただし、getter メソッドを追加すると、次のようになります。
public class MyClass {
private String field1;
public String getField1() {return field1;}
}
次に、グアバ反射コードが機能しています。私はこれについて少し損をしていると告白しなければなりません。リフレクション ライブラリは getter を使用してプライベート インスタンス変数の値を返すことができることを理解していますが、getter が存在するという理由だけで Field オブジェクト自体が返されますか?. 誰かがこれがどのように起こるか考えていますか?