为什么将Type []强制转换为Class []会抛出ClassCastException?

Rai*_*baz 3 java reflection casting

今天我正在编写一些重要的反射使用代码,我遇到了这种行为我无法解释:为什么呢

Type[] types = ((ParameterizedType)m.getGenericReturnType()).getActualTypeArguments();
Class[] c = (Class[])types;
Run Code Online (Sandbox Code Playgroud)

当迭代同一个数组并转换每个元素时,抛出一个ClassCastException,即

for(Type t : types) {
    Class c = (Class)t;
}
Run Code Online (Sandbox Code Playgroud)

成功?

我的意思是,如果可以将单个元素转换为另一个类,为什么同样类型的数组之间的转换也不可能呢?

可能有一个原因,但我似乎无法找到一个......

Joa*_*uer 5

你不能把a转换Type[]为a,Class[]因为a Type[]不是a Class[].这可能听起来微不足道,但这就是它的全部.

如果你可以把a转换Type[]为a Class[],当你的一个元素Type不是Class(ParameterizedType例如)时,你会发生什么?