Java枚举变量与源引用类型不兼容问题求助
问题描述
我有多个类需要复用相同的常量,因此创建了如下枚举来存放这些常量:
public enum PopularRecipes{ LASAGNA (new Recipe("LASAGNA", 35, true, "Meat, Cheese, Onions, Garlic, Noodles")) }
但当我尝试将该枚举常量传入接受Recipe类型的addRecipe方法时,如下代码:
class BlueBook { private final Recipes PAGE_ONE = new Recipes().addRecipe(PopularRecipes.LASAGNA) }
出现编译错误:
The method addRecipe(Recipe) in the type Recipes is not applicable for the arguments (PopularRecipes)
我认为自己对枚举的某个核心特性存在误解,但查阅资料未发现这种用法不可行,恳请解释为何枚举变量的类型发生了变化?
问题原因与解决方法
核心原因
枚举类型PopularRecipes和Recipe是完全独立的Java类型。每个枚举常量(比如PopularRecipes.LASAGNA)本质是PopularRecipes类的实例,哪怕你在枚举构造时传入了Recipe对象,枚举实例本身的类型也不会变成Recipe。这就是编译器报错的根本原因——参数类型不匹配。
解决方法
给PopularRecipes枚举添加一个成员变量存储传入的Recipe实例,并提供一个获取方法:
public enum PopularRecipes{ LASAGNA (new Recipe("LASAGNA", 35, true, "Meat, Cheese, Onions, Garlic, Noodles")); // 存储Recipe实例 private final Recipe recipe; // 枚举构造方法 PopularRecipes(Recipe recipe) { this.recipe = recipe; } // 对外提供获取Recipe的方法 public Recipe getRecipe() { return recipe; } }
之后调用addRecipe时,通过枚举实例的getRecipe()方法拿到真正的Recipe对象传入:
class BlueBook { private final Recipes PAGE_ONE = new Recipes().addRecipe(PopularRecipes.LASAGNA.getRecipe()); }
内容的提问来源于stack exchange,提问作者DielandThings
相关产品推荐
相关产品推荐

