私有接口方法,例如用例?

7 浏览
0 Comments

私有接口方法,例如用例?

在考虑为Java SE 8添加对Lambda表达式的支持时,曾经有人提议在接口中支持私有方法,但后来被撤回,以便更好地集中精力处理Java SE 8中的更高优先级任务。现在提议实现对私有接口方法的支持,以便在接口的非抽象方法之间共享代码。

这是根据http://openjdk.java.net/jeps/213中的规范以及https://bugs.openjdk.java.net/browse/JDK-8071453中的错误报告所说的。

但是,即使根据上面给出的简短解释,我真的想不出有任何必要使用"private interface methods"的用例。我可以请问一个关于代码方面有用的"private interface methods"的例子吗?

编辑:答案是,由于在Java 8中向接口添加了默认实现,可能存在默认实现使用相同代码库的情况。

例如:

public interface MyInterface {
     default void initializeMyClass(MyClass myClass, Params params) {
         //在100行代码中执行一些神奇的初始化myClass的操作
     }
     default MyClass createMyClass(Params params) {
         MyClass myClass = new MyClass();
         initializeMyClass(myClass, params);
         return myClass;
     }
     default MyClass createMyClass() {
         MyClass myClass = new MyClass();
         initializeMyClass(myClass, null);
         return myClass;
     }
}

这个例子可能有些愚蠢,但假设我们想在两个方法中使用`initializeMyClass(MyClass, Params)`。然而,如果我们使用默认方法这样做,`initializeMyClass(MyClass, Params)`将成为公共接口的一部分!为了防止这种情况发生,我们只能将整个`initializeMyClass(MyClass, Params)`的代码放在`createMyClass()`的默认方法中。这导致代码重复,这是不可取的。

因此,这在重构时会导致问题,并且为了消除这种代码重复,允许使用私有默认方法。

谢谢回答!

0