Значение поля становится нулевым в унаследованном классе - PullRequest
0 голосов
/ 18 сентября 2018

В основном у меня есть класс бобов, скажем, 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 возвращает представление и устанавливает значение переменной emp внутри MyClass

@Controller
class Controller1 extends MyClass{

    @RequestMapping("/req1")
    public ModelAndView view1(){
        return getView(1,"John");
    }
}

В идеале, поскольку установлено значение emp , в консоли должно отображаться «Джон». Однако, когда я звоню через мой второй контроллер, я получаю исключение NullPointerException

@Controller
class Controller2 extends MyClass{

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

В чем может быть причина такой проблемы?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Cntroller1 и controller2 не имеют связи, и когда вы инициализируете emp в controller1 и вызовите controller2, это будет 2 разных запроса.Вот почему вы получаете исключение нулевого указателя.

Вы должны иметь emp как static, чтобы сохранить его значение.

0 голосов
/ 18 сентября 2018

У вас есть два разных контроллера, каждый из которых расширяет MyClass.У каждого из этих контроллеров есть свой экземпляр Emp.Поэтому, хотя вы уже вызвали '/ req1' и инициализировали значение Emp в Controller1, значение Emp в Controller2 все еще неинициализировано (следовательно, NPE, когда вы пытаетесь вызвать что-то для него).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...