Java “final”字段修饰符在一个不可变类中是超级修饰符吗?

Java “final”字段修饰符在一个不可变类中是超级修饰符吗?,java,intellij-idea,final,Java,Intellij Idea,Final,我通常有这样的小类定义,如下所示: 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 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”是否是一种良好的做法?

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


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

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