这个问题在这里已经有了答案:
How do I get a class instance of generic type T?
(22 个回答)
Get generic type of class at runtime
(28 个回答)
4年前关闭。
考虑以下通用转换器类(为简洁起见简化/不完整)...
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
的构造函数如果您不想多次传递它。
关于java - 泛型类中 T.class 的等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45492302/