看一个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;
}
}