Mar*_*eIV 6 java generics class
考虑以下通用转换器类(为简洁起见,已简化/不完整)...
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!
}
}
Run Code Online (Sandbox Code Playgroud)
在子类外部,我可以convert毫无问题地调用第一个。将此子类视为Car泛型类型参数。我可以进去Car.class,像这样...
public class CarConverter extends BaseConverter<Car>
{
public void someFunction()
{
String someString;
convert(someString, Car.class);
}
}
Run Code Online (Sandbox Code Playgroud)
我想做的就是尽可能多地移动到基类。由于 'Car' 在这里是已知的,因此convert需要Car.class, 并在基类中TModel表示Car(无论如何对于这个具体的 BaseConverter ),我试图TModel.class在基类中使用,但如上所述,它不起作用。
那么如何在 Java 中实现这一点呢?
这是 Java 中泛型的限制。泛型仅存在于编译时,即在运行时该对象只是一个BaseConverter,因此您无法查询它的泛型类型。最简单的解决方案通常是在调用方法时传入一个Class<TModel>对象(就像您所做的那样)。BaseConverter如果您不想多次传递它,也可以将它传递给构造函数。