前言:我已经研究过为什么Java中的“枚举继承”是不合法的。
我的问题如下:给定一个类“Recipe”,我希望它的属性“category”是一个常量值列表,例如“APPETIZER,BREAKFAST,DESSERT,MAIN_COURSE,SOUP” - 我使用枚举逻辑上可以实现这一点。
然后我的问题是:如果我想让每个枚举都有自己的“子项”(例如:对于“BREAKFAST”的“SWEET”和“SAVORY”,或者对于“DESSERT”的“CAKE”、“MUFFIN”和“BISCUITS”),以便:
1.指定子类(“子枚举”)是强制性的(例如,“myRecipe.setCategory(DESSERT)”应该引发异常);
2.禁止从不同“家族”的“子枚举”中使用(例如,“SOUP.BISCUITS”应该引发异常);
3.我应该能够通过点符号访问“子枚举”(例如,“myRecipe.setCategory(DESSERT.CAKE)”) - 或其他类似的“轻量级”语法。
我还没有能够想出任何在Java中实现所有三个要求的“干净”解决方案。
是否有任何“神秘的”设计模式来解决这个问题?你会如何实现这个问题?
我的问题如下:给定一个类“Recipe”,我希望它的属性“category”是一个常量值列表,例如“APPETIZER,BREAKFAST,DESSERT,MAIN_COURSE,SOUP” - 我使用枚举逻辑上可以实现这一点。
然后我的问题是:如果我想让每个枚举都有自己的“子项”(例如:对于“BREAKFAST”的“SWEET”和“SAVORY”,或者对于“DESSERT”的“CAKE”、“MUFFIN”和“BISCUITS”),以便:
1.指定子类(“子枚举”)是强制性的(例如,“myRecipe.setCategory(DESSERT)”应该引发异常);
2.禁止从不同“家族”的“子枚举”中使用(例如,“SOUP.BISCUITS”应该引发异常);
3.我应该能够通过点符号访问“子枚举”(例如,“myRecipe.setCategory(DESSERT.CAKE)”) - 或其他类似的“轻量级”语法。
我还没有能够想出任何在Java中实现所有三个要求的“干净”解决方案。
是否有任何“神秘的”设计模式来解决这个问题?你会如何实现这个问题?
.setCategory
方法可以接受其中任何一个。 - John Glenn