私は以下のパッケージ構造とクラスを持っています。Javaがリフレクションによるプライベートプロパティにアクセス
package X
Class A
private string fieldX;
protected string getFieldX(){ return fieldX};
package Y
Class B extends A
Class C extends B
私はClassCオブジェクトを持っており、リフレクションによってfieldXを取得しようとしています。
Class partypes[] = new Class[0];
Object arglist[] = new Object[0];
Method getContextMethod = ClassC.class.getMethod("getFieldX",partypes);
String retValue = (string) getContextMethod.invoke(classCInstance, arglist);
しかし、私はNoSuchMethod例外を取得しています。
フィールドXにも直接触れました。しかし今回はNoSuchField Exceptionを取得しています。
Field reqField = ClassC.class.getDeclaredField("fieldX");
reqField.setAccessible(true);
Object value = reqField.get(classCInstance);
String retValue = (string) value;
私が間違っていることは何ですか? ClassCオブジェクトからこのfieldXを取得する方法はありますか?
解決策:(ソリューションにはおかげさまでvz0);
民間分野へのダイレクトアクセス:
Field reqField = ClassA.class.getDeclaredField("fieldX");
reqField.setAccessible(true);
String value = (String)reqField.get(clazzc);
メソッド呼び出し。
Class partypes[] = new Class[0];
Object arglist[] = new Object[0];
Method getContextMethod = ClassA.class.getDeclaredMethod("getFieldX",partypes);
getContextMethod.setAccessible(true);
System.out.println((String)getContextMethod.invoke(clazzc, arglist));
メソッドが 'ClassC'で宣言されていないので、これは機能しません。 – BalusC
編集済みです。 – vz0
明確化が加えられました。 – vz0