即使Type Erasure将T减少到Object,如何返回确切的对象类型

时间:2014-11-23 20:21:19

标签: java

这里的方法" returnObj"能够返回" TestGen"类型的对象即使" Type Erasure"已将T减少为对象。

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();

    }

}

1 个答案:

答案 0 :(得分:2)

这是所有编译器的诡计:因为编译器知道MyGeneric的类型参数是TestGen,所以它会在场景后面静静地插入一个类型。如果您从字节码反编译回调,它看起来像这样:

TestGen tg = (TestGen)mg.returnObj();

编译器已验证调用将在运行时成功。