代码之家  ›  专栏  ›  技术社区  ›  Abhishek Roy

字段值在继承类中变为空

  •  -1
  • Abhishek Roy  · 技术社区  · 6 年前

    基本上我有一个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中的变量

    @Controller
    class Controller1 extends MyClass{
    
        @RequestMapping("/req1")
        public ModelAndView view1(){
            return getView(1,"John");
        }
    }
    

    理想情况下,因为 电磁脉冲 已设置,应在控制台中显示“john”。但是,当我通过第二个控制器进行调用时,会得到一个空指针异常

    @Controller
    class Controller2 extends MyClass{
    
        @RequestMapping("/req2")
        public ModelAndView view2(){
            System.out.println(emp.getName()); // -> NullPointerException 
            return mav;
        }
    }
    

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

    2 回复  |  直到 6 年前
        1
  •  0
  •   Pooja Aggarwal    6 年前

    cntroller1和controller2没有链接,当您在controller1中初始化EMP并调用controller2时,它将是两个不同的请求。所以这就是为什么你得到空指针排除。

    您需要将EMP设置为静态的,以保持它的值。

        2
  •  0
  •   user10367961    6 年前

    您有两个不同的控制器,每个控制器扩展MyClass。每个控制器都有自己的EMP实例。因此,尽管您已经调用了'/req1'并在controller1中初始化了emp的值,但controller2中的emp值仍然未初始化(因此,当您尝试调用它时,会出现NPE)。