public interface Food {
enum Appetizer implements Food {
SALAD, SOUP, SPRING_ROLLS;
}
enum mainCourse implements Food {
LASAGNE, BURRITO, PAD_THAT, LENTILS, HUMMOUS, VINDALOO;
}
enum Dessert implements Food {
TIRAMISU, GELATO, BLACK_FOREST_CAKE, FRUIT, CREAM_CARAMEL;
}
enum Coffee implements Food {
BLACK_COFFEE, DECAF_COFFEE;
}
}
public enum Course {
APP(Food.Appetizer.class), MAIN(Food.mainCourse.class), DES(
Food.Dessert.class), COFF(Food.Coffee.class);
private Food[] values;
private Random rand = new Random();
private Course(Class<? extends Food> kind) {
values = kind.getEnumConstants();
}
public Food randomSelection() {
return values[rand.nextInt(values.length)];
}
}
public class Meal {
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("^^^^^^^^^^^^^^");
}
}
}
运行结果如下:
SPRING_ROLLS
PAD_THAT
BLACK_FOREST_CAKE
DECAF_COFFEE
^^^^^^^^^^^^^^
SPRING_ROLLS
BURRITO
BLACK_FOREST_CAKE
DECAF_COFFEE
^^^^^^^^^^^^^^
SPRING_ROLLS
BURRITO
CREAM_CARAMEL
DECAF_COFFEE
^^^^^^^^^^^^^^
SALAD
LASAGNE
BLACK_FOREST_CAKE
BLACK_COFFEE
^^^^^^^^^^^^^^
SALAD
BURRITO
BLACK_FOREST_CAKE
DECAF_COFFEE
^^^^^^^^^^^^^^
对于enum而言,实现接口是其子类化的唯一办法,如果Food中的每个enum都实现了接口,通过向上转型便可以得到所有的东西。 当需要与一大堆类型打交道时,创建枚举的枚举,就可以创建一个新的enum然后实例food的每一个类。