Я пытаюсь написать библиотеку интерфейсов коллекции, которые реализуют большинство методов в стандартном API Collection, используя новый синтаксис метода по умолчанию в Java 8. Вот небольшой пример того, что я собираюсь сделать:
public interface MyCollection<E> extends Collection<E> {
@Override default boolean isEmpty() {
return !iterator().hasNext();
}
//provide more default overrides below...
}
public interface MyList<E> extends MyCollection<E>, List<E> {
@Override default Iterator<E>iterator(){
return listIterator();
}
//provide more list-specific default overrides below...
}
Однако даже этот простой пример встречается с ошибкой компилятора:
error: interface MyList<E> inherits abstract and default
for isEmpty() from types MyCollection and List
Из моего понимания методов по умолчанию это должно быть разрешено, поскольку только один из расширенных интерфейсов обеспечивает реализацию по умолчанию, но, по-видимому, это не так. Что здесь происходит? Есть ли способ заставить это делать то, что я хочу?