You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 01:35:27