枚举中的枚举
来源:互联网 发布:手游大话西游仙玉淘宝 编辑:程序博客网 时间:2024/06/05 18:54
枚举类enum是一个final类,不允许子类扩展。因此要扩展枚举,需要借助于接口。下面的这个例子可以解决枚举中枚举的问题。
public interface Food {//开胃类enum Appetizer implements Food{SALAD,SOUP,SPRING_ROLLS;}//主食类enum MainCourse implements Food{LASAGNE,BURRITO,PAD_THAI,LENTILS,HUMMOUS,VINDALOO;}//甜食类enum Dessert implements Food{TIRAMISU,GELATO,BLACK_FORSET_CAKE,FRUIT,CREME_CARAMEL;}//咖啡类enum Coffee implements Food{BLACK_COFFEE,DECAF_COFFEE,ESPRESSO,LATTE,CAPPUCCINO,TEA,HERB_TEA;}}
public enum Course {APPETIZER(Food.Appetizer.class),MAINCOURSE(Food.MainCourse.class),DESSERT(Food.Dessert.class),COFFEE(Food.Coffee.class);private Food[] values;private Course(Class<? extends Food> kind){values = kind.getEnumConstants();}public Food randomSelection(){return Enums.random(values);}public static void main(String[] args){for(int i = 0;i<5;i++){for(Course course : Course.values()){Food food = course.randomSelection();System.out.println(food);}System.out.println("---");}}}
public class Enums {private static Random rand = new Random(47);public static <T extends Enum<T>> T random(Class<T> ec){//T extends Enum<T> 意味着T必须是个枚举return random(ec.getEnumConstants());}public static <T> T random(T[] values){return values[rand.nextInt(values.length)];}}
你甚至可以封闭地更完美:
public enum Course {APPETIZER(Food.Appetizer.class),MAINCOURSE(Food.MainCourse.class),DESSERT(Food.Dessert.class),COFFEE(Food.Coffee.class);private Food[] values;private Course(Class<? extends Food> kind){values = kind.getEnumConstants();}public Food randomSelection(){return Enums.random(values);}public interface Food {//开胃类enum Appetizer implements Food{SALAD,SOUP,SPRING_ROLLS;}//主食类enum MainCourse implements Food{LASAGNE,BURRITO,PAD_THAI,LENTILS,HUMMOUS,VINDALOO;}//甜食类enum Dessert implements Food{TIRAMISU,GELATO,BLACK_FORSET_CAKE,FRUIT,CREME_CARAMEL;}//咖啡类enum Coffee implements Food{BLACK_COFFEE,DECAF_COFFEE,ESPRESSO,LATTE,CAPPUCCINO,TEA,HERB_TEA;}}public static void main(String[] args){for(int i = 0;i<5;i++){for(Course course : Course.values()){Food food = course.randomSelection();System.out.println(food);}System.out.println("---");}}}
- 枚举中的枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 枚举
- 网站推广
- 成员函数的隐藏
- c# ToString()方法改变DateTime的样式
- linux打补丁和文件创建用户
- 使用Eclipse构建Maven的SpringMVC项目(一)
- 枚举中的枚举
- 中文在unicode中的编码范围
- [ZZ]windows堆管理的函数
- 机器学习与人工智能学习资源导引
- 深入了解scanf()getchar()和gets()cin等函数
- ArcGIS,普适的GIS
- Eclipse中更改默认java代码格式
- 将byte数组的内容转换成BSTR类型,反之。
- 如何增加网站收录量