看一个GenricDaoImpl代码时候存在一个疑问:
Java code?
1
2
3
4
5
6
7
8
9
10
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`];
}
}
Java code?
1
2
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,代码如下:
Java code?
1
2
3
4
5
6
7
8
9
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;
}
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…