这是一个可接受的Java默认接口方法吗?

问题描述:

public interface Example<E> 
{ 
    E get(int index); 

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

这将是界面的初始设计。是这样的一个可接受的使用默认方法(基本上为默认参数),还是应该只在将来使用它来增加功能?这是一个可接受的Java默认接口方法吗?

+1

我从Oracle那里听到的官方说法是,它主要是为未来增加的功能而设计的。但是在Java 8中有新的接口包含默认方法,所以看起来他们没有自己的建议。 :) – yshavit

+4

这对我来说很好,在代码审查时我不会遇到任何问题。只有评论会命名 - 也许'getFirst'?还需要证明,如果事情是空的,它会抛出一些东西 - 这将我带到了最后;这不会编译 - 缺少'interface'声明中的名称。 –

+0

明天你可以添加默认方法,当它是未来:) – ZhongYu

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

官方来源,我能找到甲骨文有关的default接口方法的使用目的是(source):

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

不过,我把它当作是一样的abstract类,定义abstract方法是必须由子类实现(在这种情况下,没有缺省实现接口的方法),以及提供具体方法是可能会被子类重写(默认接口方法)。