方法没有抛出UnsupportedOperationException,尽管它应该

时间:2017-05-26 12:23:35

标签: java android android-studio debugging

出于某种原因,我已经能够在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开放源代码中可见的实现中发现,这应该从未执行过。

我非常困惑,我猜这是一种缓存错误,或者由于可能没有建立干净,但是怎么会发生这样的事情呢?

这是预期的还是可以重复的?

将来如何避免这种情况?我每次都必须做清洁吗?

断点是否会以某种方式阻止此代码正确构建清理?

1 个答案:

答案 0 :(得分:1)

有一些可能的解释,你已经提到了一些。对我来说,最有可能的解释是,在您的情况下press只会在您尝试通过它删除一个或多个元素时抛出removeAll()

我刚试过这个:

UnsupportedOperationException

它在我的电脑上运行正常,没有任何异常迹象。我使用的是Java 8,因此可能在Android上运行不正常,但您可以试试。但是,我没有在文档中找到允许这样做的任何内容。

虽然前一版本的遗留是另一种可能的解释,但您的断点当然不应与您的观察有任何关系。