Как упомянуто ниже (чтобы отметить это, поскольку я, возможно, плохо объяснил себя):
Я хочу понять принцип, лежащий в основе этого вопроса, чтобы я мог применить эти знания к реальному проблема.
ВЫПУСК ВЫПУСКА
Я работаю в системе, предназначенной для использования в качестве абстрактной библиотеки, которая будет использоваться многими подсистемами. Идея состоит в том, чтобы иметь стандартное поведение, расширяемое реализациями. Моя проблема в том, что java компилятор не может определить тип параметра метода, даже если это не имеет смысла, поскольку границы хорошо устанавливаются для каждого связанного обобщенного c класса / метода.
Ниже приведен Например, минимальный пример для воспроизведения проблемы. Я знаю, что это выглядит немного глупо в этом примере, но это из-за упрощения:
public class Test {
public static void main(String[] args) {
Gen<? extends Base> gen = new HijaGen();
gen.applyTo(Hija.EXAMPLE);
}
private interface Base {
String getName();
}
private enum Hija implements Base {
EXAMPLE;
@Override
public String getName() {
return this.name();
}
}
private interface Gen<T extends Base> {
boolean applyTo(T base);
}
private static class HijaGen implements Gen<Hija> {
@Override
public boolean applyTo(Hija base) {
return false;
}
}
}
В основном это говорит, что applyTo ожидает подкласс Base, и Hija недопустим, что с моей точки зрения делает нет смысла.
Заранее спасибо.
РЕДАКТИРОВАТЬ:
Этот код для библиотеки, так что решение не может указывать тип с тех пор его нельзя было расширять с помощью конкретных реализаций.
Я уже знаю, что если я укажу тип generi c вместо броска подстановочного знака типа, он будет отлично работать. Но мой вопрос заключается в том, как это возможно, что, хотя подклассы Hija Base и методическая фирма требуют подкласс Base, он никогда не скомпилируется ...
Я хочу понять принцип, лежащий в основе этой проблемы, чтобы я мог применить это знание к реальной проблеме.