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

Java枚举类定义values()方法报错及调用歧义问题求助

Java枚举自定义values()方法报错的原因及解决办法

为什么会报错?

Java编译器会自动为每个枚举类生成一个隐式的static Cheese[] values()方法,用来返回该枚举的所有常量数组。你手动定义的values()方法和编译器自动生成的方法签名完全一致,因此会触发“方法已定义”的编译错误;同时因为两个方法签名相同,调用时编译器无法区分,就会出现歧义问题。

解决办法

方案1:直接使用编译器自动生成的values()方法

这是最简便的方式,完全不需要自己手动实现,直接调用即可获取所有枚举常量:

enum Cheese {
    MOZZARELLA,
    NONE,
    VEGAN;
}

// 调用示例
public class Main {
    public static void main(String[] args) {
        Cheese[] allCheeses = Cheese.values();
        for (Cheese cheese : allCheeses) {
            System.out.println(cheese);
        }
    }
}

方案2:自定义不同名的方法(如果有特殊需求)

如果确实需要自定义逻辑,只需要换一个方法名,避免和编译器生成的values()冲突即可,比如命名为getAllCheeses():

enum Cheese {
    MOZZARELLA,
    NONE,
    VEGAN;

    public static Cheese[] getAllCheeses() {
        // 这里可以添加自定义逻辑,比如过滤某些常量
        return new Cheese[]{MOZZARELLA, NONE, VEGAN};
    }
}

// 调用示例
public class Main {
    public static void main(String[] args) {
        Cheese[] allCheeses = Cheese.getAllCheeses();
        for (Cheese cheese : allCheeses) {
            System.out.println(cheese);
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:20:32