Java subList报错:List<Integer>无法转换为ArrayList<Integer>求助
问题分析
报错的核心原因是:ArrayList.subList(int fromIndex, int toIndex)方法返回的是List类型实例(实际是ArrayList的内部子类SubList,并非ArrayList本身),你直接将其赋值给ArrayList类型的变量,就会触发类型不匹配错误。
解决方案
有两种实用的解决方式:
方式一:面向接口声明变量(推荐)
把jack的类型改为List<Integer>,匹配subList的返回值类型;同时建议将sumArray方法的参数也改为List<Integer>,面向接口编程能兼容所有List实现类,提升代码灵活性:
// 修改sumArray方法参数类型 static Integer sumArray(List<Integer> array){ Integer sum = Integer.valueOf(0); for(int i=0; i<array.size(); i++){ sum += array.get(i); } return sum; } // 修改jack的声明类型 List<Integer> jack = RideArr.subList(0, 4);
方式二:转换为ArrayList实例
如果确实需要ArrayList类型对象,可以把subList的结果传入ArrayList构造方法,创建新的ArrayList实例:
ArrayList<Integer> jack = new ArrayList<>(RideArr.subList(0, 4));
注意:这种方式会复制subList中的元素到新列表,新列表和原列表不再共享数据,修改其中一个不会影响另一个。
修正后的完整代码(方式一)
import java.util.ArrayList; import java.util.List; public class Test { // Sum of array static Integer sumArray(List<Integer> array){ Integer sum = Integer.valueOf(0); for(int i=0; i<array.size(); i++){ sum += array.get(i); } return sum; } public static void main(String[] args){ ArrayList<Integer> RideArr = new ArrayList<Integer>(); RideArr.add(1); RideArr.add(2); RideArr.add(3); RideArr.add(4); RideArr.add(5); List<Integer> jack = RideArr.subList(0, 4); System.out.println(sumArray(jack)); } }
内容的提问来源于stack exchange,提问作者Manish Joyeuse
相关产品推荐
相关产品推荐

