gpt4 book ai didi

java - 关于 Java 中的泛型转换的一些知识

转载 作者:行者123 更新时间:2023-11-29 07:48:54 26 4
gpt4 key购买 nike

在 Java 中,大家都知道 Integer 不能转换为 String,这是编译时的错误。

现在对于这个一般情况,

        public <T> T cast(Object o) {
return (T) Integer.class.cast(o);//cast Integer to T
}

void method1() {
String q = cast("q"); //T is String
}

我只是不明白为什么在这种情况下 java 无法在将 Integer 转换为 String 的编译时警告您。为什么?在我的知识中,类型删除发生在编译之后。

编辑:我只是认为编译器有类型推断知道T是String,所以不能转换为Integer。但显然不是。

最佳答案

有了这个

public <T> T cast(Object o) {
return (T) Integer.class.cast(o);//cast Integer to T
}

你声明了一个类型变量 T那是无限的,即。它可以是任何引用类型。所以 castInteger可能有效,也可能无效。

编译器所能做的就是警告你

Type safety: Unchecked cast from Integer to T

相反,如果您为类型变量设置了界限,例如

public <T extends CharSequence> T cast(Object o) {
return (T) Integer.class.cast(o); // Cannot cast from Integer to T
}

然后你会得到一个编译错误,因为CharSequenceInteger不在同一继承层次结构中,因此不兼容。

在这种特定情况下,即使不转换为 T,您也会遇到编译错误。 .这是因为

AnyTypeName.class 

总是返回 Class<ThatTypeName>Class#cast使用通用类型。在这种情况下,它将返回 Integer。和 Integer不可转换为 T .

关于java - 关于 Java 中的泛型转换的一些知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22903106/

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