-1

我是java初学者。请解释一下“super(Car.class);”是什么意思 在构造函数中做什么?

public class CarDaoImpl extends AbstractDaoImpl<Long, Car> implements CarDao {

public CarDaoImpl() {
super(Car.class);
}
}
4

1 回答 1

2

根据您在问题中提出的内容,我认为该课程AbstractDaoImpl是这样的:

public class AbstractDaoImpl<S, T> {
    public AbstractDaoImpl(Class<T> clazz) {
        ...
    }
}

public class CarDaoImpl extends AbstractDaoImpl<Long, Car> implements CarDao {
    public CarDaoImpl() {
        super(Car.class);
    }
}

所以它需要子类给<T>它们一个类。

为什么这样做?

您可能听说过 Java 中的类型擦除,这意味着所有泛型信息都将在运行时消失。

传递对类的引用是一种在可能需要时也将这些信息保存在运行时的方法。

反射

在这种特殊情况下,<T>可以通过反射确定类型。但这是品味和风格的问题,如果我们这样做或直接交给课程,因为反射不是很直接使用。

实际上,直接处理它是唯一类型安全的方法。

于 2016-09-05T14:12:34.387 回答