Java 继承类中的字段值变为null
基本上我有一个bean类,比如EmpJava 继承类中的字段值变为null,java,spring-boot,inheritance,nullpointerexception,Java,Spring Boot,Inheritance,Nullpointerexception,基本上我有一个bean类,比如Emp class Emp{ private int id; private String name; public Emp(int id, String name){ this.id = id; this.name = name; } // Setters and Getters } 还有一个类包含Emp引用 class MyClass{ protected Emp emp; prote
class Emp{
private int id;
private String name;
public Emp(int id, String name){
this.id = id;
this.name = name;
}
// Setters and Getters
}
还有一个类包含Emp引用
class MyClass{
protected Emp emp;
protected ModelAndView mav;
protected ModelAndView getView(int id, String name){
emp = new Emp(id,name);
mav = new ModelAndView("my-view"); // JSP Page
mav.addObject("emp",emp);
return mav;
}
}
控制器1返回一个视图,并在MyClass内设置emp变量的值
@Controller
class Controller1 extends MyClass{
@RequestMapping("/req1")
public ModelAndView view1(){
return getView(1,"John");
}
}
理想情况下,由于已设置emp的值,因此应在控制台中显示“John”。然而,当我通过第二个控制器进行调用时,我得到一个NullPointerException
@Controller
class Controller2 extends MyClass{
@RequestMapping("/req2")
public ModelAndView view2(){
System.out.println(emp.getName()); // -> NullPointerException
return mav;
}
}
出现这种问题的可能原因是什么?您有两个不同的控制器,每个控制器都扩展了MyClass。每个控制器都有自己的Emp实例。因此,尽管您已经调用了“/req1”并初始化了Controller1中的Emp值,但Controller2中的Emp值仍然未初始化(因此,当您尝试在其上调用某些内容时NPE)。Cntroller1和Controller2没有链接,当您在Controller1中初始化Emp并调用Controller2时,将是两个不同的请求。这就是为什么会出现空指针异常
您需要将emp设置为静态,以保持其值 在controller2中,从不初始化MyClass的emp,因此NPE,controller1不影响here@benjaminc你能解释清楚一点吗?