出于某种原因,我已经能够在AbstractList的扩展名上执行removeAll。
特别是该列表是java.util.Arrays.Arraylist(不是java.util.ArrayList),它是AbstractList的扩展,不支持删除或添加。
更改以下行后
Set<String> defaultList = new HashSet<>(Arrays.asList(getDefaultNames()));
Set<String> names = new HashSet<>(_adapter.getContainerNames());
defaultList.removeAll(names);
到
List<String> defaultList = Arrays.asList(getDefaultNames());
List<String> names = _adapter.getContainerNames();
defaultList.removeAll(names);
我能够编译代码,执行它并按排序顺序查看列表,即使在完全卸载应用程序之后也是如此。
从吃完回来后,删除所有断点(每行都有一个断点),并在新版本和新版本之间切换几次(在git中查看每个版本,编译我安装了一个UnsupportedOperationException,而不是排序列表。
现在我从android.jar.java.util.Arrays开放源代码中可见的实现中发现,这应该从未执行过。
我非常困惑,我猜这是一种缓存错误,或者由于可能没有建立干净,但是怎么会发生这样的事情呢?
这是预期的还是可以重复的?
将来如何避免这种情况?我每次都必须做清洁吗?
断点是否会以某种方式阻止此代码正确构建清理?
答案 0 :(得分:1)
有一些可能的解释,你已经提到了一些。对我来说,最有可能的解释是,在您的情况下press
只会在您尝试通过它删除一个或多个元素时抛出removeAll()
。
我刚试过这个:
UnsupportedOperationException
它在我的电脑上运行正常,没有任何异常迹象。我使用的是Java 8,因此可能在Android上运行不正常,但您可以试试。但是,我没有在文档中找到允许这样做的任何内容。
虽然前一版本的遗留是另一种可能的解释,但您的断点当然不应与您的观察有任何关系。