即使“类型擦除”已将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/

10-13 04:24