Java: 构造函数参数(double 类型)始终为 0
Java: constructor argument (type double) always 0
我有一个 class,它的构造函数有两个双精度类型的参数。
public class NetcdfHandler {
double x;
double y;
public NetcdfHandler (double x, double y){
x = this.x;
y = this.y;
}
}
当我在我的 Servlet 的 doGet 方法中调用它时,构造函数以某种方式不 "received" 给定的双精度值。这意味着在创建 NetcdfHandler 实例后,x 和 y 的值都为 0.0(但不是 "null"),尽管 "Lat" 和 "Lng" 设置正确:
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);
}
我想这是一个初学者的错误,但我无法弄清楚这里的问题是什么。也许有人可以提供帮助?
您的构造函数不正确。这样写:
public NetcdfHandler (double x, double y){
this.x = x;
this.y = y;
}
目前您正在做相反的事情:将默认字段值(0.0)放入参数中。因此在构造函数退出时字段不会更改并且参数会被遗忘。
如果您不打算在构建后更改字段 x
和 y
,最好将它们声明为 final:
final double x;
final double y;
这样更容易防止一些编程错误。特别是您的代码会导致编译错误,例如 "final field is not initialized in constructor".
我有一个 class,它的构造函数有两个双精度类型的参数。
public class NetcdfHandler {
double x;
double y;
public NetcdfHandler (double x, double y){
x = this.x;
y = this.y;
}
}
当我在我的 Servlet 的 doGet 方法中调用它时,构造函数以某种方式不 "received" 给定的双精度值。这意味着在创建 NetcdfHandler 实例后,x 和 y 的值都为 0.0(但不是 "null"),尽管 "Lat" 和 "Lng" 设置正确:
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);
}
我想这是一个初学者的错误,但我无法弄清楚这里的问题是什么。也许有人可以提供帮助?
您的构造函数不正确。这样写:
public NetcdfHandler (double x, double y){
this.x = x;
this.y = y;
}
目前您正在做相反的事情:将默认字段值(0.0)放入参数中。因此在构造函数退出时字段不会更改并且参数会被遗忘。
如果您不打算在构建后更改字段 x
和 y
,最好将它们声明为 final:
final double x;
final double y;
这样更容易防止一些编程错误。特别是您的代码会导致编译错误,例如 "final field is not initialized in constructor".