字段值在继承的类中变为空

时间:2018-09-18 07:45:14

标签: 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;
    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;
    }
}

此问题背后的可能原因是什么?

2 个答案:

答案 0 :(得分:0)

您有两个不同的控制器,每个控制器都扩展MyClass。每个控制器都有自己的Emp实例。因此,尽管您已经调用了'/ req1'并在Controller1中初始化了Emp的值,但Controller2中的Emp值仍未初始化(因此,当您尝试在其上调用NPE时)。

答案 1 :(得分:0)

Cntroller1和controller2没有链接,当您在controller1中初始化emp并调用controller2时,它将是2个不同的请求。这就是为什么您会得到空指针的原因。

您需要将emp设为静态,以保持其价值。