【问题标题】:Java 9 : default method v/s private method in interfaces [duplicate]Java 9:接口中的默认方法与私有方法[重复]
【发布时间】:2018-05-06 06:29:11
【问题描述】:

众所周知,Java 9 接口也将支持private 方法。所以现在在接口中你可以声明private 方法以及default 方法。两种方法都应该有主体(我可以说它是相似的)。找了些Java 9: private interface methods, example use-case?这样的问题,没找到更多的点。

据我了解,我发现了一个差异:

接口的default方法在子类中可见,而private方法由于private修饰符不可见。

我的问题是,除此之外还有其他区别吗?当我们在设计 API 或结构时必须使用private 方法和default 方法时。

【问题讨论】:

  • 如果某些 default 方法需要一个本地方法,而不是公开,则将其设为 private 方法。

标签: java java-9


【解决方案1】:

假设您有一个带有两个default 方法的接口:a()b()。这两个方法有一些共同的逻辑,你可以把它们放在一个private方法c()中。

在 Java8 中,上述方法 c() 必须是公共的,即使它只是接口的内部实现。在接口中引入private 之前,很难用这种默认方法编写干净的接口。

因此,当您要放入的实现特定于接口本身而不是实现它的外部世界时,您应该标记一个方法private 而不是default

【讨论】:

    【解决方案2】:

    从我的逻辑角度来看,事情并没有改变 - 到目前为止,您何时使用 private 方法?隐瞒什么?不重复代码?同样的事情在这里 - 当你需要时使用它,特别是当可能有代码是common时,例如用于多种其他方法,或者只是你想隐藏它。

    【讨论】:

    • *隐藏什么? * 明白这一点。
    • @ArvindKatte 链接中的答案没有公开该私有方法及其所有“实现细节”,我相信这意味着相同。
    • @nullpointer 啊!好点 - 不幸的是,我还没有阅读那个链接的问题。这确实看起来像重复。但有时,包括我在内,会在重复中找到更好的答案;似乎我几乎没有增加任何附加值:|你认为我们应该这样关闭这个吗?
    猜你喜欢
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 2019-11-14
    • 2018-01-28
    • 1970-01-01
    • 2015-03-17
    • 2018-06-13
    • 1970-01-01
    相关资源
    最近更新 更多