[英]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.