У меня есть интерфейс, какПараметр дополнительного типа позволяет избежать ошибочной ошибки переопределения?
public interface AnInterface {
Consumer<Object> getConsumer();
}
И класс реализации как
public class AClass implements AnInterface {
@Override
public Consumer<String> getConsumer() {
return System.out::println;
}
}
это (правильно) не компилируется, поскольку Consumer<String>
не распространяется Consumer<Object>
.
Однако, если я изменить интерфейс, чтобы иметь дополнительный неиспользуемый параметр типа на getConsumer, ошибка исчезнет, и он отлично компилируется:
<T> Consumer<Object> getConsumer();
Что здесь происходит ?!
Это происходит с javac в JDK 1.8 u20 и компилятором Eclipse в Luna.
Спасибо за очень хороший вопрос. –
странно, что он не компилируется в первую очередь, вы должны иметь возможность переопределить с более конкретным типом в обратном направлении, который расширяет (присваивается) исходный тип http://stackoverflow.com/questions/14694852/can-overridden- методы-differ-in-return-type – Hurda
@Hurda, это не то же самое. –