当前位置: 首页 > 知识库问答 >
问题:

java 8不支持操作异常在subList.clear()

云建木
2023-03-14

下面是在strList5的subList.clear()调用中引发异常的代码:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public static List<String> removeRange(List<String> strList, int         maxElementsToBeAllowedInList) {
    if (strList.size() > maxElementsToBeAllowedInList) {
        System.out.println("Clearing out sublist: ["
                + strList.subList(maxElementsToBeAllowedInList, strList.size()) + "]");
        strList.subList(maxElementsToBeAllowedInList, strList.size()).clear();
    }
    return strList;
}

public static void main(String[] args) {
    List<String> strList1 = new ArrayList<>();
    List<String> strList2 = Arrays.asList("one", "two", "three");
    List<String> strList3 = Arrays.asList("one", "two", "three", "four", "five");
    List<String> strList4 = Arrays.asList("one", "two", "three", "four", "five", "six");
    List<String> strList5 = Arrays.asList("one", "two", "three", "four", "five", "six", "seven", "eight");

    try {
        System.out.println("Before modification strList1: [" + strList1 + "]");
        ListTruncateEndTest.removeRange(strList1, 5);
        System.out.println("After modification strList1: [" + strList1 + "]");

        System.out.println("Before modification strList2: [" + strList2 + "]");
        ListTruncateEndTest.removeRange(strList2, 5);
        System.out.println("After modification strList1: [" + strList2 + "]");

        System.out.println("Before modification strList3: [" + strList3 + "]");
        ListTruncateEndTest.removeRange(strList3, 5);
        System.out.println("After modification strList1: [" + strList3 + "]");

        System.out.println("Before modification strList4: [" + strList4 + "]");
        ListTruncateEndTest.removeRange(strList4, 5);
        System.out.println("After modification strList4: [" + strList4 + "]");

        System.out.println("Before modification strList5: [" + strList5 + "]");
        ListTruncateEndTest.removeRange(strList5, 5);
        System.out.println("After modification strList5: [" + strList5 + "]");
    } catch (Exception e) {
        System.out.println("Error: [" + e.toString() + "]");
    }
}

Before modification strList1: [[]]
After modification strList1: [[]]
Before modification strList2: [[one, two, three]]
After modification strList2: [[one, two, three]]
Before modification strList3: [[one, two, three, four, five]]
After modification strList3: [[one, two, three, four, five]]
Before modification strList4: [[one, two, three, four, five, six]]
Clearing out sublist: [[six]]
Error: [java.lang.UnsupportedOperationException]

我清除子列表的方式有问题吗?或者这是8Java的臭虫?我的Java8在Mac上的版本是:java版本"1.8.0_45"Java(TM)SE运行时环境(构建1.8.0_45-b14)JavaHotSpot(TM)64位服务器VM(构建25.45-b02,混合模式)

共有1个答案

潘国源
2023-03-14

数组返回的列表。由于列表是固定长度的,因此在子列表s上调用清除会引发不支持操作异常

您需要使用ArrayList来代替。

List<String> strList2 = new ArrayList<>(Arrays.asList("one", "two", "three"));
 类似资料:
  • 我不知道;我不太明白在哪里可以抛出这个异常。 例如,我正在实现

  • 相反,将引发“UnsupportedOperationException”。看起来ContainerRequest没有从修改的请求中提取UserPrincipal。 修改是通过 问题是如何将主体信息从HttpServerProbe传输到ContainerRequestFilter。request具有安全信息(在本例中是SSL客户机证书信息),而com.sun.jersey.spi.containe

  • 我想从excel(.xlsx)文件中读取超过60万行。 我使用的是ApachePOI和xlsx拖缆。 Apache poi版本为3.15,因为xlsx streamer在上述版本中不支持 我只想迭代特定的列。我尝试过的是: 我得到这个例外,几乎没有警告 第35行是

  • 我正在使用Collections.sort()对一个列表进行排序,它似乎在我可以测试的每一个方面都工作正常。我的一些用户崩溃了。 但是,我所做的只是尝试对列表进行排序 我注意到这在Android 8及更高版本上不会发生。它只发生在5.0 - 7.1上 该列表被实例化为ArrayList,被填充,并被设置为作为泛型列表的类的实例的成员。然后用EventBus发布这个对象。然后使用Kotlin的< c

  • 我正在使用sql server进行数据库连接。并且我希望在运行多个结果集时保持结果集打开。我使用了,但在执行语句时出现以下错误, 由于我是使用sql server的新手,所以我对其中的一些概念还不是很了解。如果有人知道为什么会这样请回答我。

  • 我正在使用 Netty 5.0。 我有一个补充的客户端引导程序,我以安全聊天客户端为例.java来自netty github的例子。Wenn 我从客户端引导程序向服务器发送消息,它工作得很好。当我尝试将消息从服务器引导程序发送到客户端时(首先通过客户端成功启动连接/通道后),我得到一个 没有任何进一步的信息。从服务器向客户端发送消息是通过上面的代码完成的。 服务器引导是否仅用于接收? 服务器引导程