为什么私有方法不能也是最终的?
添加和添加到相同的方法是否多余?private
final
class SomeClass {
//--snip--
private final void doStuff()
{
// private work here
}
}
如果是,任何人都无法覆盖它,对吧?private
如果没有效果,为什么可以添加关键字?(或者我错过了什么?final
添加和添加到相同的方法是否多余?private
final
class SomeClass {
//--snip--
private final void doStuff()
{
// private work here
}
}
如果是,任何人都无法覆盖它,对吧?private
如果没有效果,为什么可以添加关键字?(或者我错过了什么?final
基本上,这是允许的,因为他们觉得不值得放置一个禁止修饰符的特殊情况。这就像你也可以将接口上的方法声明为 ,或者将接口中的嵌套类声明为 ,即使这些关键字在接口中是隐含的。您还可以在类上声明方法等。private
public
static
final
final
Java的立场是,当你添加冗余修饰符时,不要抱怨。他们始终如一地这样做。
需要私有方法成为最终方法的一种边缘情况是使用 SafeVarargs 注释时。下面的代码不编译,因为私有方法不是最终的。
@SafeVarargs
private void method(List<String>... stringLists) {
//TODO a safe varargs operation
}
这在 Java 9 中已修复。
参见:java@SafeVarargs为什么私有方法需要最终的