私は運がない解決策を探しました。これが私が持っているものであり、私が達成しようとしていることです
親クラス
public abstract class MyAbstractParentClass{
private String privateParentField;
protected String getPrivateParentField(){
return privateParentField;
}
public void setField(String value){
privateParentField = value;
}
}
子クラス
public class MyChlidClass extends MyAbstractParentClass{
@Override
public void setField(String value){
super.setField(value);
}
}
MyChlidClass
のsetField
メソッドを呼び出してから、MyAbstractParentClass
のprotected String getPrivateParentField()
あとがきを呼び出そうとしています。
@Test
public void f(){
Method[] m = MyChlidClass.class.getDeclaredMethods();
for (Method method : m) {
System.out.println(method.getName());
}
}
しかし、上記のコードはMyChlidClass
、親クラスのメソッドを除いて、宣言されたメソッドのみを返しますprotected
。保護されたメソッドにアクセスするにはどうすればよいでしょうか? 何か案は?
事前にどうもありがとうございました :)
編集 これが興味のある人のための最終的な解決策です
MyChildClass child = new MyChildClass();
chlid.setField("FOO_BAR");
Method getPrivateParentField = child.getClass().getSuperclass().getDeclaredMethod("getPrivateParentField");
getPrivateParentField.setAccessible(true);
String result = (String) getPrivateParentField.invoke(child);
System.out.println((String)result); //prints out FOO_BAR
PS :いくつかの例外があり、キャッチするか、スロー宣言を追加できます。
あなたの助けに再び感謝します