首页 > 解决方案 > 从其他应用程序调用私有实例变量,其 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 

标签: javareflection

解决方案


推荐阅读