2015-09-20 2 views
0

У меня есть класс с конструктором с двумя аргументами типа double.Java: аргумент конструктора (тип double) всегда 0

public class NetcdfHandler { 

double x; 
double y; 

public NetcdfHandler (double x, double y){ 
    x = this.x; 
    y = this.y; 
} 
} 

Когда я называю это в doGet метод моего Servlet, данные двойные значения как-то не «получил» конструктором. Это означает, что после создания экземпляра NetcdfHandler, х и у обоих есть значение 0.0 (но не «нулевой»), хотя «Lat» и «ДЛН» настроены правильно:

public class Test extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    double Lat; 
    double Lng; 

public Test() { 
     super(); 
    } 

protected void doGet(HttpServletRequest req, HttpServletResponse rsp) throws ServletException, IOException { 
     Lat = Double.parseDouble(req.getParameter("lat")); 
     Lng = Double.parseDouble(req.getParameter("lng")); 

     NetcdfHandler nc = new NetcdfHandler(Lat, Lng); 
} 

Я предполагаю, что это довольно начинающих ошибка, но я не мог понять, в чем проблема. Может, кто-то может помочь?

+0

print 'req.getParameter (" lat ")' и 'req.getParameter (" lng ")' и посмотреть, что вы получаете –

+0

Вы переключили места 'x' и' this.x'. Голосование закрывается как опечатка. – dasblinkenlight

+0

Кроме того, использование полей вместо локальных переменных в обработчиках сервисов - это плохая идея. – chrylis

ответ

4

Ваш конструктор неверен. Запишите этот путь:

public NetcdfHandler (double x, double y){ 
    this.x = x; 
    this.y = y; 
} 

В настоящее время вы делаете противоположные вещи: положить значения по умолчанию поля (которые 0,0) в параметры. Таким образом, поля не изменяются и параметры забываются при выходе из конструктора.

Если вы не собираетесь менять поля x и y после строительства, то лучше объявить их окончательными:

final double x; 
final double y; 

Таким образом, это легче предотвратить некоторые ошибки программирования. В частности, ваш код приведет к ошибке компиляции, например, «окончательное поле не инициализируется в конструкторе».

Смежные вопросы