У меня есть некоторый код следующим образом:Java генерик - стирание концепция
public class java_generic {
public static void main(String[] args) {
T t = new X();
t.<Object>m(new Object());
t.<String>m(new String());
}
static class T {
<E> void m (E e){
System.out.println("here is T");
}
}
static class X extends T {
void m (String o){
System.out.println("here is X");
}
}
}
Из моего понимания, после того, как типа стирания, класс T
будет это:
static class T {
void m (Object e){
System.out.println("here is T");
}
}
и м перегружен.
Как имеющий m(Object)
и m(String)
, я ожидаю, что результат будет
here is T
here is X
Однако результат
here is T
here is T
Интересно, почему результат будет таким.
Пожалуйста, не имя вашего фактического класса 'T'. Однобуквенные имена обычно зарезервированы для имен типовых типов, таких как '' '' '' '' ''. –
Pshemo
Кроме того, вы не должны использовать такой код в производстве – Everv0id