如何在已传参时将ArrayList<String>传入带String...参数的Java方法
解决方法
核心思路
String...本质是语法糖,编译后等价于String[]参数。你需要把额外字符串和ArrayList里的元素合并成同一个数组,才能让printStrings()正确解析所有参数——要是分别传额外字符串和数组,方法会把数组当成单个参数处理,这显然不符合需求。
手动构建数组(兼容所有Java版本)
// 获取目标列表 ArrayList<String> dataList = getArrayList(); // 创建包含额外字符串的新数组 String[] fullParams = new String[1 + dataList.size()]; fullParams[0] = "Additional String"; // 将列表元素复制到数组的后续位置 System.arraycopy(dataList.toArray(new String[0]), 0, fullParams, 1, dataList.size()); // 调用方法 printStrings(fullParams);
Java 8+ 简化写法(用Stream API)
如果你的项目用Java 8及以上,可以用Stream快速合并元素:
ArrayList<String> dataList = getArrayList(); String[] fullParams = Stream.concat( Stream.of("Additional String"), // 额外字符串 dataList.stream() // 列表元素 ).toArray(String[]::new); printStrings(fullParams);
为什么单纯转列表为数组不行?
比如你如果这么写:
// 错误写法! printStrings("Additional String", dataList.toArray(new String[0]));
这时候printStrings()会把第二个参数(String数组)当成String...的第二个元素,而不是把数组里的元素展开成参数。只有把所有元素合并到同一个数组里传入,才能让方法正确识别每一个字符串。
内容的提问来源于stack exchange,提问作者MrDiamond
相关产品推荐
相关产品推荐

