在外部类java中使用内部类对象

时间:2013-08-17 20:03:26

标签: java json java-ee playframework jackson

我在将json对象转换为POJO类时遇到问题。

我有一个名为Service的公共类,它有一个内部类User。我想使用内部类作为容器/对象来保存所有外部类方法的变量。我正在尝试执行以下操作,但我收到编译错误。请说明我如何做到这一点,请纠正我在下面的代码中所犯的错误。

从eclipse调试窗口,我看到下面的json是在节点变量中获得的 node:{“firstName”:“ndndbs”,“lastName”:“dnjdnjs”}

试验1:

public class Service {
                             // Method
public boolean createUserAccount(JsonNode node) throws Exception {
        ObjectMapper mapper = new ObjectMapper();
         User user=null;
        try {
            Service service=new Service();
            user = mapper.readValue(node, User.class);    
        } catch (Exception e) {throw new Exception("failed to bind json", e);}

     System.out.println("Use this anywhere in method"+userNode.firstName); 
    }

}
                               // Inner class
public class User {
        public String firstName;
        public String lastName;
    }
        }

OUTPUT:
NULL POINTER EXCEPTION AND user=null even after execution of mapper.readValue() statement

1 个答案:

答案 0 :(得分:0)

来自声明

user = mapper.readValue(node, User.class);  

不确定NullPointerException的原因(完整的堆栈跟踪可能有帮助)。似乎ObjectMapper试图通过Reflection创建内部类的实例。但是创建内部类和嵌套类的实例并不是直截了当的 Is it possible to create an instance of nested class using Java Reflection?

在你的情况下

Service.User.class.class.getConstructors()[0].newInstance(serviceInstance);

而不是

User.class.newInstance() 

这可能是Usual / Outer课程的一个例子。我不确定ObjectMapper是否能够以这种方式实例化类。

我建议将User移动到其自己的源User.java中的顶级公共类,除非您有特定的设计限制,我很想知道。