我有以下代碼失敗并出現(xiàn) IllegalArgumentExceptionpublic EnumSet<test> getData(){ // Line 1 return EnumSet.copyOf(get(test))) // Line 2}private Collection<Test> get(Test[] test){ //Line 1 test= test==null ? new Test[0] : test; // line 2 return Array.asList(test) //Line 3}如果 test 為 null ,則get函數(shù)的第 2 行創(chuàng)建空的 Test 數(shù)組和EnumSet.copyOf(get(test)) throws IllegalArgumentException我不明白為什么會拋出這個異常?
1 回答

慕少森
TA貢獻2019條經(jīng)驗 獲得超9個贊
AnEnumSet
使用一些反射來識別其元素的類型。(該集合使用值的“序數(shù)”來enum
跟蹤是否包含每個元素。)
當您創(chuàng)建一個EnumSet
with 時copyOf(Collection)
,它會檢查該集合是否是一個EnumSet
. 如果是,它使用與源集相同的類型。否則,它會嘗試調(diào)用getClass()
源集合中的第一個元素。如果集合為空,則沒有第一個元素,也沒有任何可查詢的類。所以在這種情況下它會失敗(“IllegalArgumentException
如果c
不是EnumSet
實例并且不包含元素則拋出”)。
要創(chuàng)建一個空的EnumSet
,您需要自己確定類,并使用noneOf()
.
Collection<Test> tests = get(test); return tests.isEmpty() ? EnumSet.noneOf(Test.class) : EnumSet.copyOf(tests);
添加回答
舉報
0/150
提交
取消