我四处寻找没有运气的解决方案,这就是我所拥有的以及我正在努力实现的目标
家长班
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:有一些例外你可以捕捉或添加它们的抛出声明;
再次感谢您的帮助