关于 Type接口和ParameterizedType接口之间强转的疑问~!!
看一个GenricDaoImpl代码时候存在一个疑问:
其中ParameterizedType接口是Type的子接口,Class类是Type实现类;
但是Class类并没有实现ParameterizedType接口,强转为什么没有报错;
Class类也没有重写getActualTypeArguments()方法;
我自写了一个类似的Demo,报了com.itany.C cannot be cast to com.itany.B,代码如下:
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;
}
}
...全文
相关推荐
谈谈Java类型中ParameterizedType,GenericArrayType,TypeVariabl,WildcardType
主要介绍Java类型中ParameterizedType,GenericArrayType,TypeVariabl,WildcardType的相关资料,需要的朋友可以参考下
Java让泛型实例化的方法
主要介绍了Java让泛型实例化的方法,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
Java泛型类型解析[项目代码]
本文详细介绍了Java中的Type接口及其子接口和实现类,包括Class、ParameterizedType、TypeVariable、GenericArrayType和WildcardType。文章通过示例代码展示了如何在运行时获取泛型类型信息,并解释了类型擦除对泛型参数的影响。此外,还探讨了ParameterizedType与TypeVariable的使用方法,以及在不同情况下获取泛型参数的实际效果。对于理解Java泛型机制和反射操作具有重要参考价值。
java反射
java反射
基于泛型的通用Dao接口和hibernate的实现
基于泛型的通用Dao接口和hibernate的实现


