当前位置: 首页 > 面试题库 >

专用接口方法,例如用例?

於英朗
2023-03-14
问题内容

“为了增加对Lambda表达式的支持,暂时考虑将对接口中私有方法的支持纳入Java SE 8,但是为了支持Java SE
8更好地关注更高优先级的任务,撤回了支持。支持专用接口方法,从而使接口的非抽象方法能够在它们之间共享代码。”

所以说http://openjdk.java.net/jeps/213的规范,
并在错误报告https://bugs.openjdk.java.net/browse/JDK-8071453中说。

但是,即使上面给出了简短的解释,我也无法真正想到任何必要的用例。请问一个示例,其中“私有接口方法”在代码方面很有用?

编辑: 所以答案是,由于如何将默认实现添加到Java 8中的接口,因此可能存在实例,其中默认实现使用相同的代码库。

例如,

public interface MyInterface {
     default void initializeMyClass(MyClass myClass, Params params) {
         //do magical things in 100 lines of code to initialize myClass for example
     }

     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()默认方法中。这导致代码重复,这是不希望的。

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

谢谢回答!


问题答案:

接口现在可以具有默认方法。添加这些是为了可以在不破坏实现那些已更改接口的所有类的情况下将新方法添加到接口。

如果需要两个默认方法来共享代码,则可以使用私有接口方法来共享代码,但不必通过接口公开该私有方法及其所有“实现细节”。



 类似资料:
  • 在Java 8之前,接口可以具有以下类型的变量/方法。 常数变量 抽象方法 因此,我们不能在接口中使用方法实现,或者更准确地说是Java 8之前的默认实现。请参阅示例。 public class Tester { public static void main(String []args) { LogOracle log = new LogOracle(); log.

  • 问题内容: 我们如何在代码中使用私有接口的方法? 抽象类是无法实例化的。因此,如果需要使用抽象类的方法,则可以继承它们并使用它们的方法。 但是,当我们谈论接口时,我们需要实现它们以使用它们的方法。 问题答案: 该关键字的意思是“任何人在同一类”: 这意味着在其中声明的所有类都可以使用该接口。 一个常见的用例是命令模式,其中接受例如字符串并将其转换为内部命令对象,这些对象都实现相同的接口。 如果将第

  • 本文向大家介绍Python类的专用方法实例分析,包括了Python类的专用方法实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python类的专用方法。分享给大家供大家参考。具体分析如下: Python 类可以定义专用方法,专用方法是在特殊情况下或当使用特别语法时由 Python 替你调用的,而不是在代码中直接调用(象普通的方法那样)。 1. __init__ 类似于构造函数 2.

  • Elasticsearch 本身不提供对索引的 rename,mapping 的 alter 等操作。所以,如果有需要对全索引数据进行导出,或者修改某个已有字段的 mapping 设置等情况下,我们只能通过 scroll API 导出全部数据,然后重新做一次索引写入。这个过程,叫做 reindex。 之前完成这个过程只能自己写程序或者用 logstash。5.0 中,Elasticsearch 将

  • 本文向大家介绍Go语言接口用法实例,包括了Go语言接口用法实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Go语言接口用法。分享给大家供大家参考。具体分析如下: 接口类型是由一组方法定义的集合。 接口类型的值可以存放实现这些方法的任何值。 希望本文所述对大家的Go语言程序设计有所帮助。

  • 5.6. 专用类方法 5.6.1. 获得和设置数据项 除了普通的类方法,还有一些对于 Python 类可以定义的专用方法。专用方法是在特殊情况下或当使用特别语法时由 Python 替你调用的,而不是在代码中直接调用(象普通的方法那样)。 就象你在 上一节 所看到的,普通的方法对在类中封装字典很有帮助。但是只有普通方法是不够的,因为除了对字典调用方法之外,还有很多事情可以做的。例如,你可以通过一种没