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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:28:42