这是否可以接受使用Java默认接口方法? 公共接口示例 { E-get(int-index); 默认的E get() { 返回get(0); } }

这是否可以接受使用Java默认接口方法? 公共接口示例 { E-get(int-index); 默认的E get() { 返回get(0); } },java,interface,default-method,Java,Interface,Default Method,这将是接口的初始设计。这是默认方法的一种可接受的用法(基本上用于默认参数),还是将来仅用于添加功能?这是在Java 8及更新版本的接口上有效使用默认方法 以下是文件: 和教程: 这是在Java 8及更高版本的接口上对默认方法的有效使用 以下是文件: 和教程: 我可以从Oracle找到有关default接口方法预期用途的官方来源是(): 默认方法使您能够向库的接口添加新功能,并确保与为这些接口的旧版本编写的代码的二进制兼容性 但是,我将其视为与抽象类相同,定义了必须由子类实现的抽象方法(在本例中,

这将是接口的初始设计。这是默认方法的一种可接受的用法(基本上用于默认参数),还是将来仅用于添加功能?

这是在Java 8及更新版本的接口上有效使用默认方法

以下是文件:

和教程:

这是在Java 8及更高版本的接口上对默认方法的有效使用

以下是文件:

和教程:

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

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

但是,我将其视为与
抽象
类相同,定义了必须由子类实现的
抽象
方法(在本例中,是没有默认实现的接口方法),并提供了可能被子类覆盖的具体方法(默认接口方法).

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

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


但是,我将其视为与
抽象
类相同,定义了必须由子类实现的
抽象
方法(在本例中,是没有默认实现的接口方法),并提供了可能被子类覆盖的具体方法(默认接口方法).

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

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

我从Oracle那里听到的官方说法是,它主要用于未来增加的功能。但是Java 8中有一些新的接口包含默认方法,所以看起来他们没有采纳自己的建议。:)我觉得这很好;在代码审查时,我不会有这个问题。唯一的注释是命名-可能是
getFirst
?还需要记录,如果东西是空的,它将
抛出
一些东西,这就引出了我的最后一点;这无法编译-缺少
接口
声明上的名称。您可以在明天添加默认方法,当它是未来:)@ZhongYu,但到那时它将是今天。困境默认方法应该记录其行为,通常只是重复默认方法体。但这种行为并不一定是该方法的契约。我从Oracle那里听到的官方说法是,它主要用于将来添加的功能。但是Java 8中有一些新的接口包含默认方法,所以看起来他们没有采纳自己的建议。:)我觉得这很好;在代码审查时,我不会有这个问题。唯一的注释是命名-可能是
getFirst
?还需要记录,如果东西是空的,它将
抛出
一些东西,这就引出了我的最后一点;这无法编译-缺少
接口
声明上的名称。您可以在明天添加默认方法,当它是未来:)@ZhongYu,但到那时它将是今天。困境默认方法应该记录其行为,通常只是重复默认方法体。但这种行为并不一定是方法的契约。
public interface Example<E>
{
    E get(int index);

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