java - 构造函数参数是否应该声明为final

标签 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/

相关文章:

java - 在java中使用.equals()比较字符串

java - 我可以用另一个final定义一个final变量吗?

java - 从 JComboBox 返回对象

java - 什么时候 AtomicInteger 优于同步?

c# - 在类声明中初始化对象与构造函数的区别

c# - 我应该使用多个构造函数还是一个接口(interface)?

c++ - VS2008 C++ 编译器错误?

java - 为什么阴影会影响 `final` 行为?

java - 无法引用不同方法中定义的内部类内的非最终变量 lblNewLabel

java - 扫描仪跳过新行