![](/img/trans.png)
[英]java.lang.UnsupportedOperationException JavaFX ArrayList<String> to ObservableList<StringProperty>
[英]java.lang.UnsupportedOperationException with ArrayList()
我有一个像这样的 class
@Getter
public class MyClass {
private Collection<String> headers;
public myConfig(DownloadRequest downloadRequest) {
this.headers = downloadRequest.getHeaders() == null ? new ArrayList() : downloadRequest.getHeaders();
}
}
当我运行它时,它给了我java.lang.UnsupportedOperationException
。
当我在另一个 function 中使用标头并执行getHeaders().clear()
时,我收到此错误。
downloadRequest.getHeaders()
的返回类型是Collection<String>
我无法弄清楚我可以将标题投射到什么位置。
I keep getting different Exceptions as I change my code, like UnsupportedOperationException
and java.lang.ClassCastException: java.util.Arrays$ArrayList incompatible with java.util.ArrayList
, when I change the code to something else, trying out other StackOverflow solutions like this - 为什么在尝试从列表中删除元素时会收到 UnsupportedOperationException? .
我刚刚开始研究 Java,过去一直在研究 python 和 nodejs。
任何帮助表示赞赏。
问题在于, 文档中提到的Collection#clear()
是可选操作,并非所有实现都需要支持它。 如果他们不这样做,他们可以抛出UnsupportedOperationException
。 在您的情况下,从downloadRequest.getHeaders()
返回的列表显然是一个不可修改的集合,不支持此操作。
如果是这样,则对其调用clear()
将从downloadRequest
中删除所有标头。 这就是你想要达到的目标吗? 可能不是。 如果是,那么应该有一个类似downloadRequest.clearHeaders()
的方法。
要解决此问题,您可以将不可修改集合中的元素复制到例如ArrayList
:
new ArrayList<>(downloadRequest.getHeaders())
这会将原始容器中的元素复制到新的可修改ArrayList
中,然后您可以随意修改它。
Also note you're java.util.Arrays$ArrayList
which is named ArrayList
, but it is not java.util.ArrayList
. 这是从Arrays.asList(...)
返回的不可调整大小的集合,它也不支持clear()
。
downloadRequest.getHeaders()
方法可能返回一个只读集合,因此不支持.clear()
您可以使用ArrayList
来包装它并获得可写访问的结构
// private list<String> headers;
Collection<String> headers = downloadRequest.getHeaders();
this.headers = headers == null ? new ArrayList<>() : new ArrayList<>(headers) ;
我认为您在执行 new ArrayList() 时可能使用了错误的 ArrayList class
From your ClassCastException you are using: java.util.Arrays$ArrayList, which is a nested class of the Arrays class and is immutable.
检查您的导入:您应该使用 java.util.ArrayList。
编辑:没关系这个嵌套的 class 是私有的; 以前的答案可能是正确的,返回的集合必须是不可变的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.