Arrays.asList方法踩坑

Arrays.asList方法不会如期望地将基础类型的数组自动装箱并生成新的列表,如果想要将基础类型的数组自动装箱,可以考虑使用Guava包中提供的asList方法。如果确实需要创建只包含一个基础类型的数组为元素的列表,明确地使用Collections.singletonList方法来表达意图。List intArrayToInteger(int[] intArray) {

List <integer> List = Arrays.asList(intArray); // 编译错误,Arrays.asList方法返回值类型为List

return integerList;

}

List<Integer> intArrayToIntegerList2(int[] intArray) {

// 正确使用jdk自建的Arrays类

List<Integer> integerList = Arrays.stream(intArray).boxed().collect(Collectors.toList());

return integerList;

}

List<Integer> intArrayToIntegerList(int[] intArray) {

// 使用guava包中的com.google.common.primitives.Ints类

List<Integer> integerList = Ints.asList(intArray);

return integerList;

}

List<Integer> convertToIntArraySingleton(int[] intArray) {

// 如果确实需要创建只包含一个基础类型的数组为元素的列表,使用Collections.singletonList方法

List<int[]> intArraySingletonList = Collections.singletonList(intArray);

return intArraySingletonList;

}

尝试修改Arrays.asList方法返回的集合会抛出UnsupportedOperationException,这是由于Arrays.asList方法返回的集合是java.util.Arrays$ArrayList类,而非java.util.ArrayList类。

反例

void function(String[] strings) {

List<String> stringList = Arrays.asList(strings);

// 将会抛出UnsupportedOperationException

stringList.add("another string");

}

正例

void function(String[] strings) {

// 调用ArrayList的构建方法构建一个新的List

List<String> stringList = new ArrayList<>(Arrays.asList(strings));

stringList.add("another string");

}

相关推荐
橘颂TA6 分钟前
【Linux】读写锁
大数据·linux·开发语言·c++·读写锁
Strange_Head7 分钟前
补充知识点`makefile`、`config`、`GLP协议` 1/3 ——《驱动篇》
linux·嵌入式硬件
learning-striving33 分钟前
VMware Workstation中centso下载安装
linux·vmware·虚拟机
薛定谔的悦1 小时前
光伏逆变器多协议接入——Modbus RTU 在新能源设备集成中的实践
linux·运维·服务器·bms
bksczm1 小时前
Linux之基础开发工具(Ubuntu)之编译器
linux·运维·服务器
Jun6262 小时前
【RV1103】AD4115实现8通道ADC采样,MQTT数据传输,1K采样率
linux·python
嵌入式×边缘AI:打怪升级日志2 小时前
DS18B20 Linux 驱动开发实战:从时序图到温度读取的保姆级教学
linux·驱动开发
橘颂TA2 小时前
【Linux】自旋锁
linux·开发语言·数据库·c++
一脸dio样7542 小时前
第5章 保护模式进阶,向内核迈进
linux·开发语言
代码中介商3 小时前
Linux 信号处理与进程控制深度解析
linux·运维·信号处理