Java 最后的吸气剂

Java Final Getters

给出以下 class:

public class SomeClass {

    private final int a;

    public SomeClass(int a) {
        this.a = a;
    }

}

完整性而言,哪个更合适?

public final int getA() {
    return a;
}

public int getA() {
    return a;
}

在我看来,两者是等价的,所以我什至懒得把 final.

但是为了完整起见,第一种方法似乎比第二种方法 "correct" 多。

关键字 final 应用于方法与应用于变量的含义完全不同。

在一个方法上,表示no subclass can override the method。它与不更改值无关。所以,你的两个选择是不等价的,因为子类是否可以覆盖 getA().

根据Oracle

You can declare some or all of a class's methods final. You use the final keyword in a method declaration to indicate that the method cannot be overridden by subclasses.

所以这取决于你所说的完整性是什么意思。 实际上 但是,这实际上取决于您是否希望 getters 被覆盖。

当你将 final 应用于 Java 中的不同事物时,它给你的意义几乎完全不同。

final on variables: Values cannot be assigned to it.

final on methods: Methods cannot be overridden by sub-classes

final on classes: That class cannot be extended by another class.

希望能给你一些清晰的东西。