gpt4 book ai didi

Java泛型——删除概念

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:54:19 28 4
gpt4 key购买 nike

我有一些代码如下:

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 重载了。

由于有 m(Object)m(String),我希望结果是

here is T
here is X

然而,结果是

here is T
here is T

我想知道为什么结果会是这样。

最佳答案

您几乎回答了您自己的问题。你只需要完全遵守后果。对你的所有代码进行删除,你会得到:

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");
}
}
}

这有希望表明 X.m 根本不会覆盖 T.m,因此通过 T 引用的调用永远不会调用 X.m.

关于Java泛型——删除概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34162305/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com