Kon*_*Man 3 java generics types erasure
我有一些代码如下:
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
从我的理解,在类型擦除后,课程T将成为这样:
static class T {
void m (Object e){
System.out.println("here is T");
}
}
Run Code Online (Sandbox Code Playgroud)
并且m超载.
有m(Object)和m(String),我希望结果会是
here is T
here is X
Run Code Online (Sandbox Code Playgroud)
但结果是
here is T
here is T
Run Code Online (Sandbox Code Playgroud)
我想知道为什么结果会这样.
你几乎回答了自己的问题.你只需要完全遵循后果.擦除所有代码,你得到这个:
public class java_generic {
public static void main(String[] args) {
T t = new X();
t.m(new Object());
t.m(new String());
}
static class T {
void m (Object e){
System.out.println("here is T");
}
}
static class X extends T {
void m (String o){
System.out.println("here is X");
}
}
}
Run Code Online (Sandbox Code Playgroud)
这有望显然X.m只是不会覆盖T.m,因此通过T引用调用永远不会调用X.m.
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |