<分区>
我见过函数参数声明为final的代码。令人惊讶的是,没有看到构造函数参数声明为 final 的代码。
例如:
public class Foo {
public Foo(final int day, final int month, final int year) {
...
}
}
为什么这不常见?代码变得冗长是否有具体原因或仅仅是事实?
标签 java constructor final
<分区>
我见过函数参数声明为final的代码。令人惊讶的是,没有看到构造函数参数声明为 final 的代码。
例如:
public class Foo {
public Foo(final int day, final int month, final int year) {
...
}
}
为什么这不常见?代码变得冗长是否有具体原因或仅仅是事实?
最佳答案
Java 总是只将参数的副本传递给函数。这意味着 final 对参数所做的唯一事情就是不允许在函数内部分配变量。
分配给函数参数(无论是在构造函数中还是在任何其他函数中)被认为是糟糕的风格,因为这会将参数的含义从函数参数更改为函数局部变量。名称的含义因此丢失。
第二个原因是类可能有字段 field1
并且构造函数有名为 field1
的参数。声明参数 final 可以避免像 field1 = field1;
这样的错误,而实际上是 this.field1 = field1;
。
本质上,在函数参数上声明 final 是一种品味问题,并增加了一点安全性(但好的 IDE 应该警告赋值,无论如何)。不过,为了安全(可以说是非常小的)安全,您将不得不输入更多内容,这就是它不经常使用的原因。
关于java - 构造函数参数是否应该声明为final,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18253010/