`

Java枚举应用的两个小例子

阅读更多

今天在看lucene源代码是看到其中的Store、Index等几个枚举类型里面不仅定义了方法,而其实例中也定义了方法,晚上回来又学习了一下Enum,整理写了这个博客。

第一个代码片段:

package com.lfl.em;

public enum Coin {
	penny("10p"), dollor("20$"), rmb("30¥");
	
	private String value;
	
	public String getValue() {
		return value;
	}
	
	Coin(String value) {
		this.value = value;
	}
	
	public static void main(String[] args) {
		Coin coin = Coin.dollor;
		System.out.println(coin.getValue());
		System.out.println(coin.getDeclaringClass());
	}
}

 coin.getDeclaringClass() 输出 com.lfl.em.Coin

 

第二个代码片段:

package com.lfl.em;

public interface ISeason {

	public String mySeason();
	
}

 

package com.lfl.em;

public class SeasonImpl  implements ISeason {

	public enum Season implements ISeason {
		SPRING {

			@Override
			public String yourSeason() {
				return null;
			}
		},
		SUMMER {
			
			public String mySeason() {
				return "夏季";
			}

			@Override
			public String yourSeason() {
				return null;
			}
		},
		AUTUMN {
			public String mySeason() {
				return "秋季";
			}

			@Override
			public String yourSeason() {
				return null;
			}
		},
		WINTER {
			public String mySeason() {
				return "冬季";
			}

			@Override
			public String yourSeason() {
				return null;
			}
		};
		
		public String mySeason() {
			return "未知季节";
		}
		
		public static String mySeason(Season season) {
			if (Season.SPRING == season) {
				return "春季";
			} else if (Season.SUMMER == season) {
				return "夏季";
			} else if (Season.AUTUMN == season) {
				return "秋季";
			} else if (Season.WINTER == season) {
				return "冬季";
			}
			
			return "未知季节";
		}
		
		public abstract String yourSeason();
	}
	
	
	@Override
	public String mySeason() {
		return "我和季节枚举没有关系啊!";
	}
	
	public static void main(String[] args) {
		Season  a = Season.AUTUMN;
		String a1 = a.mySeason();
		String a2 = Season.mySeason(a);
		System.out.println(a1 + " == " + a2);
	
		Season s = Season.SPRING;
		String s1 = s.mySeason();
		String s2 = Season.mySeason(s);
		System.out.println(s1 + " != " + s2);
		
	}

}

 

两个输出分别为:

 秋季 == 秋季
 未知季节 != 春季

 

枚举可以通过implements实现某个接口,但不能通过extends继承某个类或枚举。
abstract不可以修饰枚举,因为枚举中定义的各个值其实是枚举的实例。

 

从以上两个例子可以看出 不仅枚举类型里可以定义方法,而其实例中也可以定义方法。

而枚举和枚举实例又有很“微妙”的关系,从第二个例子中可以看出枚举实例和枚举好像有继承关系,枚举实例必须实现枚举里的抽象方法;枚举或枚举实例必须实现枚举实现接口中的方法,在这个例子中是mySeason()方法。在eclipse提示中可以看到说枚举是枚举实例的supertype。

 

这种关系可能是在编译期通过编译器确立的,
对枚举的理解还不是很透彻,以上分析如果有不正确或不恰当的欢迎指正出来共同学习。

 

分享到:
评论

相关推荐

    java jdk实列宝典 光盘源代码

    15 applet java可以编写两类程序,applications和applet,applications可以在控制台直接运行,与其他高级编程语言没有太大区别,而java的特色在于它具有编制小应用程序的功能,applet可以在internet上传输并在兼容...

    疯狂JAVA讲义

    学生提问:使用组合关系来实现复用时,需要创建两个Animal对象,是不是意味着使用组合关系时系统开销更大? 159 5.9 初始化块 159 5.9.1 使用初始化块 160 5.9.2 初始化块和构造器 161 5.9.3 静态初始化块 162 ...

    Java面试宝典(传说中的葵花宝典).doc

    补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。 备注:后面一部分回答虽然不是在正面回答题目,但是,为了展现自己的学识和表现自己对问题理解的透彻深入,可以回答一些相关的知识,...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

     《Java开发实战1200例》分为I、II两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第II卷,以开发...

    Java开发技术大全 电子版

    14.6.2小应用程序(JApplet)使用示例472 14.6.3对话框(JDialog)使用示例473 14.7中间容器476 14.7.1面板(JPanel)使用示例476 14.7.2滚动面板(JScrollPane)使用示例480 14.7.3分隔板(JSplitPane)使用...

    scala中文教程(java 平台开发语言 scala 简单教程)

    Martin Odersky 用他定义的匹萨语言给了 Java世界一个很大的冲击。尽管匹萨本身没有流行 但它展现了当把面向对象和函数型语言两种风格,技术地且很有品地混搭在一起时,就形成了 自然和强有力的组合。匹萨的设计成为...

    JAVA程序设计教程

    §1.3 一个完整的 Java程序.............................................................................................6 1.3.1 Java程序的结构 .........................................................

    javaSE代码实例

    1.4 第一个Java程序 8 1.4.1 开发源代码 8 1.4.2 编译运行 9 1.5 小结 11 第2章 基本数据类型——构建Java 大厦的基础 12 2.1 源代码注释 12 2.1.1 单行注释 12 2.1.2 区域注释 12 2.1.3 文档...

    C#基础之yield与Singleton

    这两个功能对应的语句分别是yield return和yield break。下面有2个小例子,分别没有使用yield和有使用yield。先来看第一个,当我调试时显然执行到GetResult()方法时将会跳转到方法内部并且执行完,接着再去执行输出...

    阿里巴巴编码规范 基础技能认证 考题分析(考题+答案).docx

    次版本号:保持相对兼容性,增加主要功能特性,影响范围极小的API不兼容修改。 D .修订号:保持完全兼容性,修复BUG、新增次要功能特性等。 多选 14.关于索引的使用,下列哪些说法是正确的:BCD A .查询语句 ...

    c#学习笔记.txt

    (但是请注意:两个不同但结构上等效的委托类型的实例可能会比较为相等),准确地说,两个具有相同参数列表、签名和返回类型的不同的委托类型被认为是不同的委托类型。委托实例所封装的方法集合称为调用列表。 5, ...

    asp.net知识库

    .NET 2.0 泛型在实际开发中的一次小应用 C#2.0 Singleton 的实现 .Net Framwork 强类型设计实践 通过反射调用類的方法,屬性,字段,索引器(2種方法) ASP.NET: State Server Gems 完整的动态加载/卸载程序集的解决方案 ...

    dataStructuresAndAlgorithms:数据结构与算法研究

    数据结构和算法这是一个研究数据结构和算法的项目。 例子查找操作数:...net.nopainnocode.dsaa.datastructures.HashtableTest 实现具有两个堆栈的队列:net.nopainnocode.dsaa.datastructures.ImplementedQu

    在一小时内学会 C#(txt版本)

    和 C++ 一样,C# 是大小写敏感的。半角分号(;)是语句分隔符。和 C++ 有所区别的是,C# 中没有单独的声明(头)和实现(CPP)文件。所有代码(类声明和实现)都放在扩展名为 cs 的单一文件中。 看看 C# 中的 Hello...

    华为编程开发规范与案例

    对某交换类进行计费测试,字冠011对应1号路由、1号子路由,有4个中继群11,12,13,14(都属于1#模块),前后两个群分别构成自环。其中11,13群向为出中继,12,14群向为入中继,对这四个群分别进行计费设置,对出入中继都...

Global site tag (gtag.js) - Google Analytics