什么" super(Car.class);"在构造函数中做什么?

时间:2016-09-05 14:07:37

标签: java constructor super java.lang.class

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

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

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

1 个答案:

答案 0 :(得分: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>的类型可以通过反射来确定。但这是一个品味和风格的问题,如果我们这样做或直接交给班级,因为反思不是很直接使用。

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