泛型类中的T.class等效于什么?

马克·A·多诺霍

考虑以下通用转换器类(为简便起见,简化/不完整)...

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章