[英]Encountered in Java 8 - JDK-8023339 : j.u.Arrays.asList().removeIf() is “lazy” in throwing java.lang.UnsupportedOperationException
[英]java.lang.UnsupportedOperationException but no Arrays.asList()
當我們使用Arrays.asList()從數組中分配列表時,通常會遇到以下異常,但是我在拋出該異常的代碼中看不到任何使用Array的情況。 此外,使用new ArrayList()初始化列表。
protected List getUnmapParam(PPlan pPlan){
List unmappedParams = super.getUnmapParam(pPlan, ord);
PricePlanExt apPP = null;
if (pricePlan.getapID() != null) {
apPP = getCurrentlyItem(pPlan.getID(), errorCodeH);
}
if (apPP != null) {
List billParams = apPP.getBillParams();
for (BillParam billParam : billParams) {
if (billParam.getnameVal().equals("SD")) {
BillUnmapParamType unmappedParamType = getUnMappedType();
Attribute attr = mapSimpleParameter(unmappedParamType, apPP, billParam);
unmappedParams.add(attr);//Here it is being thrown
}
}
}
return unmappedParams;
}
//Super method
protected List getUnmapParameters(Plan pPlan, Ord ord){
return Collections.EMPTY_LIST;
}
堆棧跟蹤:
java.lang.UnsupportedOperationException at
java.util.AbstractList.add(AbstractList.java:148) at
java.util.AbstractList.add(AbstractList.java:108) at
java.som.impl.oshooks.BillingImpl.getUnmapParam(BillingImpl.java:121)
我猜您至少有以下問題之一:
ArrayList
: java.util.ArrayList
add(…)
方法不會拋出UnsupportedOperationException
。 查看您的堆棧跟蹤表明,您正在使用的ArrayList
甚至不會覆蓋AbstractList<E>.add(E)
( java.util.ArrayList
可以)。 return unmappedParams;
)將永遠不會拋出UnsupportedOperationException
。 java -version
)。 在問題編輯之后:現在很清楚, 關於列表是不可變的答案是正確的:您嘗試在Collections.EMPTY_LIST
返回的列表中添加一些內容。 根據Javadoc,此列表是不可變的。
我認為這種例外的根源可能是列表是不可變的
請參閱Java文檔此
您的問題是因為有Collections.EMPTY_LIST
通常,當看到由add等引發UnsupportedOperationException時,通常表明某些代碼正在嘗試修改不可調整大小或不可修改的集合。
例如,Collections.EMPTY_LIST或Collections.SINGLETON_LIST(它們返回無法修改的集合)可以用作優化,但無意間傳遞給嘗試修改它們的方法。
有關更詳細的答案,請參見java.util.AbstractList.add上的UnsupportedOperationException。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.