Jav*_*per 3 java constructor final
我已经看到函数参数已被声明为final的代码.令人惊讶的是没有看到构造函数参数声明为final的代码.
例如:
public class Foo {
public Foo(final int day, final int month, final int year) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
为什么这不常见?有没有具体的原因或只是代码变得冗长的事实?
Tim*_*ann 12
Java始终只将参数的副本传递给函数.这意味着参数最终的唯一作用是禁止在函数内部赋值.
分配给函数参数(无论它是在构造函数中还是任何其他函数中)都被认为是错误的样式,因为这会将参数的含义从函数参数更改为函数局部变量.因此,名称的含义就丢失了.
第二个原因是类可能使字段field1和构造函数具有名为的参数field1.声明参数final可以避免出现错误,例如field1 = field1;实际意义上的错误this.field1 = field1;.
从本质上讲,在函数参数上声明final是一个品味问题,并增加了一些安全性(但是好的IDE应该警告无论如何都没有任何影响).你必须为此安排更多(可能是非常少量的)安全性,这就是为什么它不经常使用.
| 归档时间: |
|
| 查看次数: |
5042 次 |
| 最近记录: |