考虑以下通用转换器类(为简便起见,简化/不完整)...
public abstract class BaseConverter <TModel>
{
public void convert(String data, Class<TModel> classOfModelType)
{
}
public void convert(String data)
{
convert(data, TModel.class); // This doesn't work!
}
}
在子类的外部,我可以convert
毫无问题地调用第一个。将此子类Car
视为具有通用类型参数。我可以这样传递Car.class
...
public class CarConverter extends BaseConverter<Car>
{
public void someFunction()
{
String someString;
convert(someString, Car.class);
}
}
我正在尝试做的是尽可能多地移至基类。由于“汽车”,这里已知的,因此convert
期望Car.class
,并TModel
表示Car
在基类(反正这具体BaseConverter),我试图用TModel.class
在基类,但指出,这是行不通的。
那么如何用Java实现呢?
这是Java中泛型的限制。泛型仅在编译时存在,即在运行时对象只是一个对象BaseConverter
,因此您无法查询其泛型类型。最简单的解决方案通常Class<TModel>
是在调用方法时传入一个对象(如您所做的那样)。BaseConverter
如果不想多次传递它,也可以将其传递给构造函数。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句