我加入了这个规则,getClass().getGenericSuperclass() 获取到的类型还是Class
时间: 2024-05-06 13:17:46 浏览: 124
如果你在一个普通类中调用 `getClass().getGenericSuperclass()` 方法,它返回的类型是 `Type`。而如果你在一个泛型类中调用该方法,它返回的类型是 `ParameterizedType`。
如果你想获取到泛型超类的类型,你需要先将 `Type` 转换成 `ParameterizedType`,然后调用 `getActualTypeArguments()` 方法获取泛型参数的实际类型。例如:
```java
public abstract class BaseDao<T> {
private Class<T> entityClass;
public BaseDao() {
Type type = getClass().getGenericSuperclass();
ParameterizedType paramType = (ParameterizedType) type;
this.entityClass = (Class<T>) paramType.getActualTypeArguments()[0];
}
}
```
在上面的代码中,我们首先通过 `getClass().getGenericSuperclass()` 方法获取到当前类的超类的类型,然后将其强制转换成 `ParameterizedType` 类型。接着,我们调用 `getActualTypeArguments()` 方法,获取泛型参数的实际类型的数组,并通过 `[0]` 取得第一个泛型参数的实际类型,即为实体类的类型。最后,我们将实体类的类型保存到 `entityClass` 字段中。
阅读全文