【问题标题】:Java: constructor argument (type double) always 0Java:构造函数参数(双精度类型)始终为 0
【发布时间】:2015-12-17 05:24:38
【问题描述】:

我有一个带有两个双精度参数的构造器的类。

public class NetcdfHandler {

double x;
double y;

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

当我在我的 Servlet 的 doGet 方法中调用它时,构造函数不会“接收”给定的双精度值。这意味着在创建 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);
}

我想这是一个初学者的错误,但我无法弄清楚这里有什么问题。也许有人可以帮忙?

【问题讨论】:

  • 打印 req.getParameter("lat")req.getParameter("lng") 看看你得到了什么
  • 你交换了xthis.x 的位置。投票结束是一个错字。
  • 另外,在服务处理程序中使用字段而不是局部变量是一个坏主意。

标签: java constructor arguments double


【解决方案1】:

您的构造函数不正确。这样写:

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

目前您正在做相反的事情:将默认字段值(0.0)放入参数中。因此在构造函数退出时不会更改字段并且会忘记参数。

如果您不打算在构造后更改字段xy,最好将它们声明为final:

final double x;
final double y;

这样更容易防止一些编程错误。特别是您的代码会导致编译错误,例如“最终字段未在构造函数中初始化”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 2010-12-05
    • 2012-09-22
    • 1970-01-01
    相关资源
    最近更新 更多