关于 Type接口和ParameterizedType接口之间强转的疑问~!!

iskaol iskaol 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
看一个GenricDaoImpl代码时候存在一个疑问:

public class GenricDaoImpl<T extends Serializable, PK extends Serializable>
implements GenricDao<T, PK> {

private Class<?> entityClass; // 实体类的类型

public GenricDaoImpl() {
entityClass = (Class<?>)((ParameterizedType) (this.getClass()
.getGenericSuperclass())).getActualTypeArguments()[0];
}
}

Type type = this.getClass().getGenericSuperclass();
ParameterizedType parameterizedType = (ParameterizedType)type;

其中ParameterizedType接口是Type的子接口,Class类是Type实现类;

但是Class类并没有实现ParameterizedType接口,强转为什么没有报错;

Class类也没有重写getActualTypeArguments()方法;

我自写了一个类似的Demo,报了com.itany.C cannot be cast to com.itany.B,代码如下:
interface A{}
interface B extends A{}
class C implements A{}
public class Main {
public static void main(String[] args) {
A a= new C();
B b=(B)a;
}
}
...全文
评论 7
收藏 已收藏
分享
返回顶部
iskaol
Java EE 67,535 成员 225,843 内容