【问题标题】:Are 'final' field modifiers superflous in an immutable class? [duplicate]'final' 字段修饰符在不可变类中是多余的吗? [复制]
【发布时间】:2017-10-05 18:29:08
【问题描述】:

我通常有这么小的类定义,如下:

public static class Annotation {
    private final String brand;
    private final Sentiment sentiment;

    public Annotation(String brand, Sentiment sentiment) {
        this.brand = brand;
        this.sentiment = sentiment;
    }

    public String brand() {
        return this.brand;
    }

    public Sentiment sentiment() {
        return this.sentiment;
    }
}

没有任何方法可以修改客户的“品牌”和“情感”。如果我删除 'final' 修饰符,我的 IntelliJ 会给我一个警告,说我应该添加 'final' 方法。

在这种情况下总是添加“final”是一种好习惯吗?

【问题讨论】:

  • 编写代码不仅仅是执行一项任务。您正在向您的同事和未来的自己描述这项任务。通过将这些成员标记为最终成员,您可以与编辑此类的任何人交流,其目的是不应该更改这些成员。
  • 这不是引用问题的重复。这个问题是关于使私有成员变量final,而引用的问题是关于使 Class 本身成为最终的,所以它不能被扩展。
  • 最终确定是一个见仁见智的问题。无论如何都会好的。

标签: java intellij-idea final


【解决方案1】:

IntelliJ 建议变量尽可能为final,因为这样可以防止您意外修改变量。

如果使用 static final 修饰符,有时 Java 编译器也会优化代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 2015-04-29
    相关资源
    最近更新 更多