即使“类型擦除”已将T简化为“对象”,此处的“ returnObj”方法如何能够返回“ TestGen”类型的对象。
class TestGen
{
}
class MyGeneric<T>
{
T obj;
MyGeneric(T giveObj)
{
obj = giveObj;
}
T returnObj()
{
return obj;
}
}
public class TestGeneric {
public static void main(String[] args) {
MyGeneric<TestGen> mg = new MyGeneric<TestGen>(new TestGen());
TestGen tg = mg.returnObj();
}
}
最佳答案
这全是编译器的难题:由于编译器知道MyGeneric
的类型参数是TestGen
,因此它会在后台悄悄地插入类型转换。如果您从字节码反编译回调,则看起来像这样:
TestGen tg = (TestGen)mg.returnObj();
编译器已验证该调用将在运行时成功。
关于java - 即使类型删除将T减小为Object,也如何返回对象的确切类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27093841/