这个问题在这里已经有答案了:
什么是原始类型?为什么不使用它(15个答案)
两年前关门了。
请注意下面的代码没有编译,方法结果赋值失败: String s = a.method("");
.
编译错误: incompatible types: java.lang.Object cannot be converted to java.lang.String
但是,改变的时候 A a
至 A<?> a
或者 A<Object> a
,编译通过。
- 请注意类型
<T>
在方法上不同于类型<O>
在课堂上。
知道编译错误是什么吗?还有,为什么在变量中使用泛型定义 a
解决编译问题?
class A<O>
{
O something;
<T> T method(T t)
{
return t;
}
static void testJavaStrangeGenericDefinitionBehavior()
{
A a = null;
String s = a.method("abc");
}
}
2条答案
按热度按时间cyvaqqii1#
应该是:
不过,你可以用任何一门课来代替
String
因为,正如你所说T
以及O
泛型是不同的类型。删除泛型参数后,方法调用中的所有泛型都将丢失,这实际上相当于调用:
vql8enpb2#
这是因为java
type erasure
向后兼容性的含义所有泛型类型声明只存在于源代码中,编译后将转换为Object
参考资料和适当的幕后演员JVM
在这种情况下,我不明白你的意思O
或者T
.