Java编译错误:ArrayList已在当前编译单元中定义,如何解决?
解决“ArrayList已在当前编译单元中定义”编译错误
Hey there, let's break down why you're hitting this frustrating compile error and fix it right away.
问题原因
这个错误不是你写的这段代码本身有问题,而是你的当前工作目录(或者项目编译单元)里,存在一个你自己创建的、名为ArrayList.java的文件。Java编译器在查找类的时候,会优先加载你本地的这个类,而不是java.util包下官方的ArrayList,直接就造成了类名冲突。
解决方法
你有两个可行的处理方向:
方案1:移除/重命名本地的自定义ArrayList类
检查你的项目文件夹,找到那个自己写的ArrayList.java文件——如果是误创建的,直接删掉就行;如果是你确实需要的类,把它重命名成不冲突的名字,比如MyCustomArrayList.java,这样编译器就能正常识别java.util.ArrayList了。方案2:明确指定使用JDK官方的ArrayList(保留自定义类的情况)
如果你非要保留自己的ArrayList类,那就在代码里用全限定类名来声明JDK的ArrayList,避免混淆。修改后的代码如下:import java.util.*; public class FirstApp{ public static void main(String[] args){ Scanner scan = new Scanner(System.in); // 用全限定类名明确指向java.util包下的ArrayList java.util.ArrayList<Integer> list = new java.util.ArrayList<Integer>(); while(scan.hasNextInt()){ list.add(scan.nextInt()); } Integer[] nums = new Integer[list.size()]; nums = list.toArray(nums); for(int i = 0;i < nums.length; i++){ System.out.println(nums[i]); } } }
小提醒
尽量避免自己写的类和JDK核心类库的类名重名,尤其是java.util、java.lang这些包下的常用类,很容易触发这类命名冲突问题。
内容的提问来源于stack exchange,提问作者David Mansfield
相关产品推荐
相关产品推荐

