请注意,下面的代码无法编译,方法结果分配失败:String s = a.method("abc");
.
编译错误:incompatible types: java.lang.Object cannot be converted to java.lang.String
但是,当改变A a
to A<?> a
or to 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");
}
}
A a = null;
应该:
A<String> a = null; // or better yet, new A<String>();
虽然,你可以用任何课程代替String
因为,正如你所说,T
and O
泛型是不同的类型。
一旦删除泛型参数,您就会丢失方法调用中的所有泛型,这本质上相当于调用:
Object method(Object t);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)