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
    作为最终值。