Я делаю опыт, пытаясь переопределить метод родового класса, таким образом:Java Generic Class Метод Перекрытие
public class MyGenFun<T extends CharSequence> extends Do<String>{
public void doX(T s){
System.out.println("in CHILD");
}
public static void main (String ...a){
MyGenFun<String> x = new MyGenFun<>();
x.doX("Test"); /// LINE 1
}
}
class Do<A>{
public void doX(A a){
System.out.println("in Super");
}
}
Почему я не могу? Ошибка компиляции
yGenFun.java:15: error: reference to doX is ambiguous, both method doX(A) in Do and method doX(T) in MyGenFun match x.doX("Test"); ^ where A,T are type-variables: A extends Object declared in class Do T extends CharSequence declared in class MyGenFun 1 error
Если я прокомментирую «Линия 1», я могу скомпилировать код. Поэтому я считаю, что я правильно отношусь.
Тип-стирание не стирает doX (T) до doX (Object) как в супер, так и в child и становится Override? –
Компилятор по-прежнему проверяет использование дженериков перед генерированием типов байт-кода и стирания. См. [Link] (http://stackoverflow.com/questions/339699/java-generics-type-erasure-when-and-what-happens) – beosign