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

