Java Final Getters

bud*_*udi 2 java getter final

鉴于以下课程:

public class SomeClass {

    private final int a;

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

}
Run Code Online (Sandbox Code Playgroud)

哪个在完整性方面更合适?

public final int getA() {
    return a;
}
Run Code Online (Sandbox Code Playgroud)

要么

public int getA() {
    return a;
}
Run Code Online (Sandbox Code Playgroud)

在我看来,两者都是等价的,所以我甚至都不打扰final.

但是为了完成,第一种方法似乎比第二种更"正确".

rge*_*man 11

关键字final在应用于方法时意味着完全不同,而不是应用于变量.

在方法上,这意味着没有子类可以覆盖该方法.它与不更改值无关.所以,你的两个选择并不等同,因为子类是否可以覆盖getA().

  • 该方法不能强制不改变返回值.即使你将一个局部变量声明为`final`并返回它,调用者仍然会收到一个可变副本.但是,调用者可以通过声明它赋予返回值`final`的变量来强制执行它,例如`final int result = foo.getA();`. (3认同)

use*_*460 7

当你final在Java中应用不同的东西时,它会给你带来几乎完全不同的含义。

final on variables:无法为其赋值。

final on methods: 方法不能被子类覆盖

final on classes:该类不能由另一个类扩展。

希望能给你一些清晰的信息。