在Java中,何时应在接口中使用私有实例方法?

sg7*_*610 9 java oop

从Java 9开始,接口中的方法可以是私有的。私有方法可以是静态方法,也可以是实例方法。由于私有方法只能在接口本身的方法中使用,因此它们的使用仅限于接口其他方法的辅助方法。

Cay S. Horstmann,核心Java第一册-基础

我知道我们可以将通用功能放在私有方法中,而不是公开使用。但是我们可以在这里有两种私有方法:

  1. private
  2. private static

使用private static方法是可以理解的,但是什么时候应该使用private方法呢?我们不在这里处理实例,因为这是一个接口,那么为什么private允许创建方法?我们不是只需要private static方法吗?

jin*_*ngx 2

好的,再次尝试实际回答OP的问题。当需要从私有方法调用接口上的另一个非静态方法时,私有方法不能是静态的。例如,如果下面的私有方法是静态的,就会出现编译错误:

public interface InterfaceWithMethods {
    public default void doSomething() {
        doSomethingCommon();
    }

    public default void doSomethingElse() {
        doSomethingCommon();
    }

    public void actuallyDoSomething();

    private void doSomethingCommon() {
        System.out.println("Do something first.");
        actuallyDoSomething();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @FlorianSalihovic,当您需要从此私有方法调用另一个方法时,您会选择非静态而不是静态。难道不是这个原因吗? (2认同)
  • @FlorianSalihovic但正如我从人们的评论中了解到的那样,OP并没有询问可见性或何时使用静态与非静态,而是询问为什么当私有静态似乎足够时,为什么在接口上允许使用非静态私有方法。我的回答提供了一个只有非静态方法才有效的用例。 (2认同)