构造函数java

时间:2015-12-11 08:37:10

标签: java immutability

我无法理解为什么double xxyy被置于构造函数中final。为什么我不把它们double xxdouble yy放在一起。为什么 他们必须final吗?我猜这个的全部目的是 创建immutable对象。

public class Point {
private final double x, y;
private double distance; 

 public Point(final double xx, final double yy) {
  this.x = xx;
  this.y = yy;
  this.distance = -1; 
 }

}

2 个答案:

答案 0 :(得分:11)

这些参数不需要是最终的。

使参数最终有两个原因:

  1. 在该函数中声明的内部类中使用它们;
  2. 防止意外更改其值。
  3. 显然(1)不适用。

    (2)是不必要的,因为它是如此简单的代码,你可以看到它没有改变参数。

    有一种思想流派认为所有参数和局部变量都应当被声明为最终的,因为这样可以更容易推理代码,就像使用不可变类型更容易使用它们的代码的原因。

    还有另一种思想流派认为,在任何地方添加final只是不必要的噪音,如果你正在编写方法,你无法判断价值是否在变化,那么你的方法太长了

    很大程度上,让参数和局部变量最终归结为个人/团队偏好。

答案 1 :(得分:0)

将x和y变量声明为最终解决了目的(即以后不得更改该值)。将构造函数的参数声明为final是没有意义的。