gpt4 book ai didi

java - 了解 Java 中的类型删除

转载 作者:行者123 更新时间:2023-11-30 10:16:01 24 4
gpt4 key购买 nike

<分区>

我在 JShell 中尝试了以下 Java 代码。

class X<A> {
A id(A a) {
return a;
}
}

案例一

X<Integer> w = new X<Integer>();
w.id(5)

在这种情况下,JShell 只打印 5,正如我所预料的那样。我希望 w 中的身份函数用 Integer 类型参数化因此只期望一个 Integer .提供不是 Integers 子类型的变量会导致此函数出错。

案例二

X x = new X<Integer>();
x.id(5)

JShell 确实输出了 5,但在输出 5 的同时,它还输出了这个错误信息:

|  Warning:
| unchecked call to id(A) as a member of the raw type X
| x.id(5)
| ^-----^

未经检查的对 id(A) 的调用是什么意思?它似乎无法推断出 x 的类型成为X<Integer>因为我还可以运行 x.id("5")只有一个警告,这在情况 1 中是不可能的。这是否意味着 x 中的身份函数?是多态的(相对于提供的变量类型)?

案例三

X y = new X<>()
y.id(5)
X z = new X()
z.id(5)

这种情况与情况 2 相同。但是,我无法全神贯注于代码。 y 的参数化类型是什么?对象 y 和 z 除了它们是两个独立的对象这一事实之外是否相同?

我猜测类型删除的概念在其中发挥了作用,但我无法真正理解它并解释上述现象。

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