![](/img/trans.png)
[英]A bad casting to Generics parameter type does not throw ClassCastException in Java
[英]Why does casting a Type[] to a Class[] throw a ClassCastException?
今天我正在編寫一些重要的反射使用代碼,我遇到了這種行為我無法解釋:為什么呢
Type[] types = ((ParameterizedType)m.getGenericReturnType()).getActualTypeArguments();
Class[] c = (Class[])types;
當迭代同一個數組並轉換每個元素時,拋出一個ClassCastException,即
for(Type t : types) {
Class c = (Class)t;
}
成功?
我的意思是,如果可以將單個元素轉換為另一個類,為什么同樣類型的數組之間的轉換也不可能呢?
可能有一個原因,但我似乎無法找到一個......
您不能將Type[]
轉換為Class[]
因為Type[]
不是Class[]
。 這可能聽起來微不足道,但這就是它的全部。
如果你可以將Type[]
轉換為Class[]
,當它的一個元素是一個不是Class
的Type
(例如ParameterizedType
)時,你會發生什么?
請記住,要轉換為Class[]
,對象實際上必須是Class[]
,而不是Type[]
。 例如,這將失敗:
Object[] objArr = new Object[10];
Integer[] intArr = (Integer[])objArr; // fail.
但這會奏效:
Object[] objArr = new Integer[10];
Integer[] intArr = (Integer[])objArr;
您無法轉換整個數組,因為無法保證數組中的所有元素都是Class
類型。 如果其中一個是Type
其他實現怎么辦?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.