为什么私有方法不能也是最终的?

2022-08-31 20:36:34

添加和添加到相同的方法是否多余?privatefinal

class SomeClass {

    //--snip--

    private final void doStuff()
    {
        // private work here
    }
}

如果是,任何人都无法覆盖它,对吧?private

如果没有效果,为什么可以添加关键字?(或者我错过了什么?final


答案 1

基本上,这是允许的,因为他们觉得不值得放置一个禁止修饰符的特殊情况。这就像你也可以将接口上的方法声明为 ,或者将接口中的嵌套类声明为 ,即使这些关键字在接口中是隐含的。您还可以在类上声明方法等。privatepublicstaticfinalfinal

Java的立场是,当你添加冗余修饰符时,不要抱怨。他们始终如一地这样做。


答案 2

需要私有方法成为最终方法的一种边缘情况是使用 SafeVarargs 注释时。下面的代码不编译,因为私有方法不是最终的。

@SafeVarargs
private void method(List<String>... stringLists) {
    //TODO a safe varargs operation
}

这在 Java 9 中已修复。
参见:java@SafeVarargs为什么私有方法需要最终的