'final' 字段修饰符在不可变的 class 中是否多余?

Are 'final' field modifiers superflous in an immutable class?

我通常有这么小的 class 定义,如下所示:

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;
    }
}

没有任何方法可以由客户端修改'brand'和'sentiment'。如果我删除 'final' 修饰符,我的 IntelliJ 会给我一个警告,说我应该添加 'final' 方法。

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

IntelliJ建议变量尽量final,这样可以防止你意外修改变量。

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