虽然我知道由于类型擦除,您实际上无法在运行时获得泛型的类型,但我想知道是否有可能在编译时获得它。
class ObjectHandle<T extends ObjType> {
T obj;
void setObj(T o) {
obj = o;
}
}
class ObjType {}
class SubObjType extends ObjType {}
...
ObjectHandle<SubObjType> handle = new ObjectHandle<SubObjType>();
...
ObjType obj = [method that returns an ObjType];
if(obj instanceof [handle's generic class, here SubObjType]) {
handle.setObj(obj); // cast???
}
在这里,编译器知道泛型的类型和我想要的东西,所以当我决定更改类时(在代码中,而不是在运行时),handle
我不必更改类型handle
和检查(和强制转换)instanceof
当然)。