java - 泛型类中 T.class 的等价物是什么?

标签 java class generics

这个问题在这里已经有了答案:





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/

相关文章:

java - 最终实例变量的意义是什么?

python - 带类的字典?

jQuery 按类获取元素

java - 安卓谷歌地图 : Polygon or shape that hides entire map

java - 如何用动态值实例化构造函数并 Autowiring 它?

java - 是否需要手动销毁和关闭 java.lang.Process 的打开流?

java - 如何在另一个私有(private)方法中使用一个方法的返回语句?

java - 泛型和带有 Class.forName 的 asSubClass

带有泛型的java复合设计模式

返回不同类型泛型列表的Java方法