我有一个带有一个带有两个double类型参数的construktor的类。
public class NetcdfHandler {
double x;
double y;
public NetcdfHandler (double x, double y){
x = this.x;
y = this.y;
}
}
当我在我的Servlet的doGet方法中调用它时,给定的double值在某种程度上不会被构造函数“接收”。这意味着在创建NetcdfHandler的实例后,虽然“Lat”和“Lng”设置正确,但x和y都具有值0.0(但不是“null”):
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 :(得分:4)
您的构造函数不正确。这样写:
public NetcdfHandler (double x, double y){
this.x = x;
this.y = y;
}
目前你正在做相反的事情:将默认字段值(0.0)放入参数中。因此,字段不会更改,并且在构造函数退出时会忘记参数。
如果您在施工后不打算更改字段x
和y
,最好将其声明为最终字段:
final double x;
final double y;
这样可以更容易地防止一些编程错误。特别是您的代码会导致编译错误,例如“最终字段未在构造函数中初始化”。