看一个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;
}
}
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;
}
}
解决方案 »
- eclipse中无法启动tomcat,请教大家!
- 请问一下这是什么样的错误,谢谢?
- tomcat发布工程报错
- 又是乱码?头晕..
- 内功明显不够!!各位来谈谈 (散分)
- websphere6.0到底支持不支持CMP
- 请问:手动写的bpel流程(简单的,顺序结构)可以直接导入执行引擎吗?能执行吗?
- StringTokenizer问题
- 关于客户端调用EJB的问题
- 几天下来,终于搞明白了ejb的开发、运行原理,也成功的部署了几个书上的例子并调用。分享点经验给大家,见效了。
- 关于mybatis分页插件的使用问题
- Exception sending context initialized event to listener instance of class [org.s
恩?多态?关键是Class类 和ParameterizedType 接口之间并没有关系
恩?多态?关键是Class类 和ParameterizedType 接口之间并没有关系
Type type = this.getClass().getGenericSuperclass();
type是ParameterizedType的实现类ParameterizedTypeImpl不是Class....
恩?多态?关键是Class类 和ParameterizedType 接口之间并没有关系
A类和B接口是没关系,但C类和A类有关系,也与B接口有关系,你的问题是把C类当作A类看了,所以才会纠结A与B的关系,但实际上并不是你想的那样,你那个方法得到的对象是C类型,虽然不知道具体什么类,但应该继承了A类,实现了B接口ABC你自己对号入座