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
相关产品推荐
相关产品推荐

