`
__temp
  • 浏览: 13046 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Enum实现自由选择

阅读更多

 

 

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的每一个类。
分享到:
评论

相关推荐

    Unity中实现多标签属性 枚举类型可以选择一个、多个、全选、全不选

    通过这种方式,我们成功地在Unity中创建了一个多标签属性,用户可以在编辑器中自由选择枚举类型的一个、多个、所有或没有选项。这样的设计增强了游戏对象的灵活性,便于在不同场景下调整其状态和行为。

    c# 怎样简洁高效的实现多个 Enum 自由转换

    本文将探讨如何简洁高效地实现在多个枚举类型之间的自由转换。 首先,我们来看一个实际的例子。假设A同事和B同事各自定义了关于银行的枚举: ```csharp public enum BankEnum { ICBC = 1, CMSB = 2, CMBC = 3 }...

    一种基于ENUM的Android SQLite框架.zip

    在"MultipleChoiceDialogExample"中,可能示例了如何在多选对话框中使用这种基于ENUM的SQLite框架,允许用户选择一个或多个状态,然后将这些选择保存到数据库中。这通常涉及到创建一个`AlertDialog`,提供一个列表供...

    VB.NET实现任意程序窗口化运行

    总的来说,VB.NET实现任意程序窗口化运行涉及到对Windows API的深入理解和熟练运用,通过这种方式,开发者可以更自由地控制程序的启动和显示,提升用户体验。在实际开发中,务必确保正确理解和使用API函数,遵循...

    logc:从零实现一个日志框架

    用户应能自由选择日志的输出目的地。 5. **性能优化**:为了不影响程序的正常运行,日志框架需要在处理大量日志时保持高效。 现在,我们来看看如何用Java实现这些核心功能: **1. 日志级别实现**: 创建一个枚举...

    pb.rar_Pb画图_java画笔_pb_pb 画图_画笔程序

    5. **颜色与线型**:`Color`类用于定义颜色,`BasicStroke`或`Stroke`接口定义线条样式,允许用户选择不同的颜色和线宽进行绘制。 6. **文件操作**:为了实现打开和保存功能,程序需要使用Java的`File`、`...

    WinForm窗体浮动

    这样的功能增强了用户体验,使得用户可以根据自己的工作需求自由调整界面布局。下面将详细介绍如何实现WinForm窗体的浮动功能。 1. **窗体设计** - 首先,你需要创建一个WinForm窗体,设置其属性,如大小、背景色...

    vc++ 应用源码包_1

    该实例可进行局域网的聊天、一对多、多对一、和多对多的传送和续传,理论上这是我本人的实现目的,而且目前经测试已基本实现了上述功能,而且网速一般有几M/S。另外有只打开一个应用程序、CRichEdit的使用、最小到...

    vc++ 应用源码包_2

    该实例可进行局域网的聊天、一对多、多对一、和多对多的传送和续传,理论上这是我本人的实现目的,而且目前经测试已基本实现了上述功能,而且网速一般有几M/S。另外有只打开一个应用程序、CRichEdit的使用、最小到...

    vc++ 应用源码包_6

    该实例可进行局域网的聊天、一对多、多对一、和多对多的传送和续传,理论上这是我本人的实现目的,而且目前经测试已基本实现了上述功能,而且网速一般有几M/S。另外有只打开一个应用程序、CRichEdit的使用、最小到...

    vc++ 应用源码包_5

    该实例可进行局域网的聊天、一对多、多对一、和多对多的传送和续传,理论上这是我本人的实现目的,而且目前经测试已基本实现了上述功能,而且网速一般有几M/S。另外有只打开一个应用程序、CRichEdit的使用、最小到...

    vc++ 应用源码包_3

    该实例可进行局域网的聊天、一对多、多对一、和多对多的传送和续传,理论上这是我本人的实现目的,而且目前经测试已基本实现了上述功能,而且网速一般有几M/S。另外有只打开一个应用程序、CRichEdit的使用、最小到...

    iOS之主题切换

    在iOS应用开发中,主题切换是一项重要的功能,它允许用户根据个人喜好选择...通过这个项目,你可以了解到如何在iOS应用中实现简单而有效的本地主题切换,使用户能够在亮色和暗色主题之间自由切换,提升应用的用户体验。

    swift4.0大学霸

    此外,Swift 4.0对枚举(Enum)进行了强化,支持带有关联值的枚举和原始值,使得枚举在表示复杂数据结构时更为灵活。 其次,Swift 4.0对字符串处理进行了优化。字符串现在是不可变的,这意味着一旦创建,就不能改变...

    vc++ 开发实例源码包

    该实例可进行局域网的聊天、一对多、多对一、和多对多的传送和续传,理论上这是我本人的实现目的,而且目前经测试已基本实现了上述功能,而且网速一般有几M/S。另外有只打开一个应用程序、CRichEdit的使用、最小到...

    C语言测试系统(软件)

    1. 练习模式:用户可以自由选择题目进行解答,系统实时反馈答案正误。 2. 测试模式:模拟真实的考试环境,限制答题时间,结束后一次性显示分数和解析。 五、持续更新与拓展 优秀的C语言测试系统还会不断更新题库,...

    WPF之DataGrid应用

    &lt;ObjectDataProvider x:Key="keySex" MethodName="GetValues" ObjectType="{x:Type assembly:Enum}"&gt; &lt;x:Type Type="local:Sex" /&gt; &lt;!-- 引用后台的枚举类型 --&gt; ``` 2. DataGrid 的增删改功能 DataGrid ...

    俄罗斯方块 C# GDI,DDraw

    在本项目中,用户可以在游戏运行时自由切换GDI+和DDraw,体验不同的视觉效果。 项目的源代码中包含以下几个关键文件: 1. `Tetris.cd` - 这可能是一个项目配置或资源文件,用于存储游戏的音乐、图像和其他资源。 2...

Global site tag (gtag.js) - Google Analytics