2017-02-15 7 views
1
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

ответ

1

Официально заявленная цель заключается в обратной совместимости с клиентами, реализующими старый интерфейс (в противном случае все они должны были вернуться и реализовать этот новый метод). Он был добавлен только для этой цели, а не изначально - особенностью Java. Но, честно говоря, это не имеет большого значения, и добавленная легкость использования, безусловно, делает его приемлемым, на мой взгляд.

1

The официальных источников, которые я мог бы найти с Oracle о предполагаемом использовании default метода интерфейса является (source):

Способы по умолчанию позволяют добавлять новые функциональные возможности к интерфейсам ваших библиотек и обеспечивать двоичную совместимость с кодом, написанным для более старых версий этих интерфейсов.

Однако я относиться к нему как к тому же, как abstract класса, определяя abstract методы, которые должны быть реализованы подклассами (в данном случае, методы интерфейса без реализации по умолчанию), а также предоставление конкретных методов, могут быть переопределены подклассами (метод интерфейса по умолчанию).