簡體   English   中英

為什么將Type []強制轉換為Class []會拋出ClassCastException?

[英]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[] ,當它的一個元素是一個不是ClassType (例如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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM