我想将successList设置为[10,14]我试过的是,
String oneStr = "10,11,12,14"; String twoStr = "11,14"; Returns r = new Returns(); r.setFailureList(Arrays.asList(twoStr.split(","))); r.setSuccessList(Arrays.asList(oneStr.split(","))); r.getSuccessList().removeAll(r.getFailureList()); System.out.println(r.getSuccessList());返回类是,
List<String> successList; List<String> failureList; public List<String> getSuccessList() { return successList; } public void setSuccessList(List<String> successList) { this.successList = successList; } public List<String> getFailureList() { return failureList; } public void setFailureList(List<String> failureList) { this.failureList = failureList; } public void setFailureList(ArrayList<String> failureList) { this.failureList = failureList; }并且导致stackTrace的java.lang.UnsupportedOperationException ,
Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractList.remove(Unknown Source) at java.util.AbstractList$Itr.remove(Unknown Source) at java.util.AbstractCollection.removeAll(Unknown Source)I want to set successList as [10,14] What i tried is,
String oneStr = "10,11,12,14"; String twoStr = "11,14"; Returns r = new Returns(); r.setFailureList(Arrays.asList(twoStr.split(","))); r.setSuccessList(Arrays.asList(oneStr.split(","))); r.getSuccessList().removeAll(r.getFailureList()); System.out.println(r.getSuccessList());The Returns Class is,
List<String> successList; List<String> failureList; public List<String> getSuccessList() { return successList; } public void setSuccessList(List<String> successList) { this.successList = successList; } public List<String> getFailureList() { return failureList; } public void setFailureList(List<String> failureList) { this.failureList = failureList; } public void setFailureList(ArrayList<String> failureList) { this.failureList = failureList; }And Cause java.lang.UnsupportedOperationException the stackTrace is,
Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractList.remove(Unknown Source) at java.util.AbstractList$Itr.remove(Unknown Source) at java.util.AbstractCollection.removeAll(Unknown Source)最满意答案
来自asList()的文档
返回由指定数组支持的固定大小的列表。
因此,当您直接修改(添加,删除..etc)时,您最终会遇到exception 。
所以,但在这种情况下
new ArrayList<String>(Arrays.asList(twoStr.split(",")))在这里,您不是直接引用该list 。 您正在创建一个新的ArrayList并使用Arrays.as.asList(twoStr.split(","))返回的列表数据,这不是Unmodifiable (就大小而言)。
From docs of asList()
Returns a fixed-size list backed by the specified array.
So when you are directly modifying(adding, removing ..etc) to that, you end up with exception.
So , but in the case
new ArrayList<String>(Arrays.asList(twoStr.split(",")))Here you are not referring to the list directly. You are creating a new ArrayList and using the data of the list returned by Arrays.as.asList(twoStr.split(",")) ,which is not a Unmodifiable(in terms of size).
更多推荐
发布评论