【问题标题】:Is this an acceptable use of a Java default interface method?这是对 Java 默认接口方法的可接受使用吗?
【发布时间】:2017-07-04 17:44:05
【问题描述】:
public interface Example<E>
{
    E get(int index);

    default E get()
    {
        return get(0);
    }
}

这将是界面的初始设计。像这样的默认方法(基本上是默认参数)的使用是可以接受的,还是应该只在将来用于添加功能?

【问题讨论】:

  • 我从 Oracle 那里听到的官方说法是,它主要用于未来添加的功能。但是 Java 8 中的新接口包含默认方法,所以看起来他们没有接受自己的建议。 :)
  • 这对我来说很好;在代码审查中我不会有这个问题。唯一的评论是命名 - 也许getFirst?如果东西是空的,还需要记录它会throw 一些东西——这让我想到了我的最后一点;这无法编译 - 缺少 interface 声明中的名称。
  • 你可以在明天添加默认方法,当它是未来时:)
  • @ZhongYu 但到那时就会是今天。 两难境地!
  • 默认方法应该记录其行为,通常只是重复默认方法主体。但这种行为不一定是方法的约定。

标签: java interface default-method


【解决方案1】:

【讨论】:

    【解决方案2】:

    我可以从 Oracle 找到的关于default 接口方法的预期用法的官方来源是 (source):

    默认方法使您能够向库的接口添加新功能,并确保与为这些接口的旧版本编写的代码的二进制兼容性。

    但是,我将其视为与abstract 类相同,定义了必须由子类实现的abstract 方法(在这种情况下,是没有默认实现的接口方法),如以及提供可能被子类覆盖的具体方法(默认接口方法)。

    【讨论】:

      【解决方案3】:

      官方声明的目的是为了与实现旧接口的客户端向后兼容(否则他们都必须返回并实现这个新方法)。它只是为此目的而添加的,而不是最初的 Java 功能。但老实说,这没什么大不了的,而且增加的易用性在我看来肯定是可以接受的。

      【讨论】:

        猜你喜欢
        • 2021-06-02
        • 1970-01-01
        • 2019-11-14
        • 1970-01-01
        • 1970-01-01
        • 2017-09-25
        • 2018-06-13
        • 2021-04-04
        • 1970-01-01
        相关资源
        最近更新 更多