java - 从其他应用程序调用私有实例变量,其 getter setter 不可用
问题描述
我正在使用 JAXB 从我的项目中的其他应用程序读取字符串 xml 数据。
他们提供了他们的 appdata.jar。(我无法控制他们的课程)。他们有 MessageBody。在 MessageBody 中,他们定义了一个没有 getter 和 setter 的私有实例变量。正因为如此,我无法获得特定类的实例。具有 getter n setter 的剩余字段是可访问的。我尝试了 Java 反射,它不起作用。这是我的代码 -
Class Test{
public void parseXMLStr(){
String xmlStr="<xml><first></first><second></second><third></third></xml>"
//I am able to get values of first and second as getter and setter defined.
First f =getMessageBody().getFirst();
f.dosomething().. //working
Second s =getMessageBody().getSecond();
s.dosomething()...//working
}
appdata.jar(其他应用程序)包含 MessageBody,
class MessageBody{
private First first;//getter setter provided
private Second second;//getter setter provided
private Third third;//getter setter NOT Provided
}
我如何获得第三类实例并访问其中的变量。
我尝试了如下 Java 反射,但我得到空指针异常(虽然数据在那里)
Field f = obj.getClass().getDeclaredField("third");
f.setAccessible(true);
Third t = (Third) f.get(obj);
t.getName();//here getting nullpointer exception
解决方案
推荐阅读
- r - 矩阵到 DF 转置 R
- java - JAVAFX:使用图像+文本更新列表视图
- unity3d - 如何在 Unity 中渲染流线?
- java - 在方法中(在 Java 中)改变对象参数是一种不好的做法吗?
- javascript - 如何仅考虑每个子数组的索引 [0] 对多维数组进行排序?
- php - 第一个回显数据库行不显示 PHP
- ruby-on-rails - 部署时的 ActiveSupport::MessageEncryptor:assets:precompile
- php - 减去具有一个共同键->值的数组条目
- bash - 用“;”写代码 而不是换行符
- python - 如何从输入中计算列表中的单独项目