为什么对象类型转换的泛型是隐含的?

时间:2014-10-12 16:54:43

标签: java generics

在将非泛型类转换为泛型类时,我看到了这一点:

public class TestException<T>
{
    T t;
    Object getObj(){
        return t;   
    }
}

当我尝试将返回类型从Object更改为任何其他说String时,我必须输入强制类型:

String getObj(){
    return (String)t;   
}

为什么对象类型转换的泛型是隐式的?无法在java文档中找到任何实现。

4 个答案:

答案 0 :(得分:7)

每个类都会继承Object,因此T可以隐式转换为Object

答案 1 :(得分:5)

由于您的泛型类型T未绑定,因此它将获得隐式绑定T extends Object。这意味着它可以作为Object返回。

无法保证TString,因此您不得不强制转换它(如果您这样做,并且T不是{{},那么您将面临运行时异常的风险{1}})。

答案 2 :(得分:1)

即使T不是泛型类型,它也会起作用。亲自试试吧!

你可以随时返回超级类型的内容,同样适用于泛型

答案 3 :(得分:1)

每个类ISA对象的每个实例,因此您始终可以将任何引用类型值强制转换为Object。但是,只有一个String对象,ISA String。