枚举中的枚举

来源:互联网 发布:手游大话西游仙玉淘宝 编辑:程序博客网 时间: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("---");}}}


 

原创粉丝点击