Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 继承类中的字段值变为null_Java_Spring Boot_Inheritance_Nullpointerexception - Fatal编程技术网

Java 继承类中的字段值变为null

Java 继承类中的字段值变为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

基本上我有一个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;
    }
}

出现这种问题的可能原因是什么?

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

Cntroller1和Controller2没有链接,当您在Controller1中初始化Emp并调用Controller2时,将是两个不同的请求。这就是为什么会出现空指针异常


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

在controller2中,从不初始化MyClass的emp,因此NPE,controller1不影响here@benjaminc你能解释清楚一点吗?