java中的最后一个双精度构造函数
我很难理解为什么将java中的最后一个双精度构造函数,java,immutability,Java,Immutability,我很难理解为什么将double xx和yy放在构造函数中final。为什么我不把它们放在double-xx和double-yy上呢。为什么? 它们必须是最终的吗?我想这一切的目的是 创建一个不可变的对象 public class Point { private final double x, y; private double distance; public Point(final double xx, final double yy) { this.x = xx; this.y
double xx
和yy
放在构造函数中final
。为什么我不把它们放在double-xx
和double-yy
上呢。为什么?
它们必须是最终的吗?我想这一切的目的是
创建一个不可变的对象
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;
}
}
这些参数不需要是最终的
将参数设置为最终参数有两个原因:
在该函数中声明的内部类中使用它们李>
以防止其值被意外更改
显然(1)不适用
(2) 没有必要,因为它是如此简单的代码,并且您可以看到它没有更改参数
有一个学派认为,所有参数和局部变量都应该被声明为最终变量,这是理所当然的,因为这样可以更容易地对代码进行推理,就像使用不可变类型可以更容易地对使用它们的代码进行推理一样
还有一个学派认为,到处添加final
只是不必要的噪音,而且,如果您编写的方法无法判断值是否在变化,那么您的方法就太长了
很大程度上,将参数和局部变量设置为final取决于个人/团队的偏好。将x和y变量声明为final解决了问题(即以后不得更改该值)。将构造函数的参数声明为final是没有意义的。这些参数不需要是final。它们对点的不可变性也没有任何影响。上面两个方法总结了答案,但在代码的下面,您可能希望将它们传递给线程运行方法?然后他们将是最终的。没有实际意义。@AfshinGhazi在代码下面,您可以参考点.this.x
和点.this.y
,而不是将xx
和yy
作为最终值。