Я нашел, что не могу назвать общие методы подстановочных типов и не понимаю почему?Как вызвать общий метод подстановочного типа в Java?
public class GenericsTry2 {
public static class Element {
private Container<? extends Element> container;
public Container<? extends Element> getContainer() {
return container;
}
public void setContainer(Container<? extends Element> container) {
this.container = container;
}
public void doStuff() {
getContainer().doStuff(this); // how to call this?
}
}
public static class SomeSubElement extends Element {
}
public static class SomeSubElement2 extends Element {
}
public static class Container<E extends Element> {
public void doStuff(E element) {
}
}
public static void main(String[] args) {
Container<SomeSubElement2> c = new Container<SomeSubElement2>();
Element e = new SomeSubElement();
c.doStuff((SomeSubElement2) e); // still can do this at compile time this way
}
}
Я согласен с вами в словах 'SubSubElement'. Пожалуйста, посмотрите мой обновленный код. Я создал «SubSubElement», и это был родной брат, и я смог ошибиться в методе 'main'. Это вызывает исключение во время выполнения. Поэтому я не понимаю, почему это должно вызвать ошибку времени компиляции в первом случае? –
Ну, это естественно. 'SomeSubElement' не может быть' SomeSubElement2', и вы получаете исключение Runtime Exception, потому что приведение происходит в Runtime. С явным приложением вы указываете компилятор * «Я знаю, что тип' e' в Runtime будет совместим с 'SomeSubtype2', поэтому, пожалуйста, доверяйте мне и скомпилируйте мой код" *, однако 'SomeSubElement' несовместим с' SomeSubElement2 'и, следовательно, вы получаете исключение .. –