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

Java ArrayList引用歧义错误求助:无法创建输入集合实现求和

问题根源与解决方案

嘿,这个报错的原因其实一眼就能看穿——你给自己的类起了个和Java标准库完全一样的名字,直接把编译器搞懵啦!

具体问题拆解:

  • 类名冲突:你导入了java.util.ArrayList,但又自定义了一个名为ArrayList的类。当你在代码里写ArrayList<Integer>时,编译器根本分不清你指的是标准库的那个集合类,还是你自己写的这个类,所以才抛出reference to ArrayList is ambiguous的歧义错误。
  • 泛型误用:你的类定义public class ArrayList<Integer>里的<Integer>是把类声明成了泛型类,这里的Integer只是一个泛型参数名(不是我们常用的java.lang.Integer整数类型),这会直接遮蔽标准的整数类型,导致后续代码里的Integer含义彻底混乱。
  • 类型不匹配:sc.next()返回的是String类型,而你想往ArrayList<Integer>里添加整数,应该用sc.nextInt()来获取整数输入,不然会触发类型转换错误。

修正后的代码示例:

import java.util.ArrayList;
import java.util.Scanner;

// 改个独特的类名,彻底避免和标准库类冲突
public class ArrayListSumDemo {
    public void arrayListSum() {
        // 现在这里的ArrayList明确指向java.util.ArrayList,没有同名类干扰了
        ArrayList<Integer> pList = new ArrayList<>();
        Scanner sc = new Scanner(System.in);
        
        System.out.println("输入数字进行求和,输入非数字即可结束:");
        while (sc.hasNextInt()) {
            System.out.println("Please enter a number: ");
            // 用nextInt()获取整数,匹配ArrayList的Integer类型
            pList.add(sc.nextInt());
        }
        
        // 补上你原本要做的求和逻辑
        int totalSum = 0;
        for (int num : pList) {
            totalSum += num;
        }
        System.out.println("所有输入数字的总和是:" + totalSum);
        
        sc.close();
    }
    
    // 别忘了加main方法才能运行程序
    public static void main(String[] args) {
        new ArrayListSumDemo().arrayListSum();
    }
}

额外小提示:

  • 永远别用Java标准库的类名来命名自己的类,比如String、ArrayList、HashMap这些,这类冲突排查起来特别浪费时间。
  • 泛型参数通常用单个大写字母表示(比如E代表元素、T代表类型),别用Integer这种标准类名,防止出现类型遮蔽的问题。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:21:41