我正在尝试扩展一个通用类,例如:
public class GenericClass<T> implements GenericClassInterface<T>
{
public T myMethod(String typeID) {
T test = _get_test_value_; // here I use jackson to retrieve T de-serialized from JSON
return T;
}
}
然后我扩展该类:
public class SpecificClass extends GenericClass<CustomType> implements SpecificClassInterface
{
public CustomType getIstance(String typeID) {
return super.myMethod(typeID);
}
}
代码编译正确,但是当我调试时,我发现当从 SpecificClass 调用 myMethod 时,类型 T
是 Object
,而不是 CustomType
,即使我在 SpecificClass
中扩展 GenericClass
时指定了 CustomType
。
怎么会呢?这是 Java 中泛型的限制吗?
最佳答案
类型参数T
在运行时(调试期间)不可用。这确实是 Java 中泛型的限制,称为类型删除。 (正如您所观察到的,所有类型参数都将转换为 Object
。)
看例子
关于Java:从具有指定类型的泛型类扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28875270/