在将非泛型类转换为泛型类时,我看到了这一点:
public class TestException<T>
{
T t;
Object getObj(){
return t;
}
}
当我尝试将返回类型从Object更改为任何其他说String
时,我必须输入强制类型:
String getObj(){
return (String)t;
}
为什么对象类型转换的泛型是隐式的?无法在java文档中找到任何实现。
答案 0 :(得分:7)
每个类都会继承Object
,因此T
可以隐式转换为Object
。
答案 1 :(得分:5)
由于您的泛型类型T
未绑定,因此它将获得隐式绑定T extends Object
。这意味着它可以作为Object
返回。
无法保证T
是String
,因此您不得不强制转换它(如果您这样做,并且T
不是{{},那么您将面临运行时异常的风险{1}})。
答案 2 :(得分:1)
即使T不是泛型类型,它也会起作用。亲自试试吧!
你可以随时返回超级类型的内容,同样适用于泛型
答案 3 :(得分:1)
每个类ISA对象的每个实例,因此您始终可以将任何引用类型值强制转换为Object。但是,只有一个String对象,ISA String。