Java枚举应用的两个小例子_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java枚举应用的两个小例子

Java枚举应用的两个小例子

 2013/8/8 1:08:16  lfl2011  程序员俱乐部  我要评论(0)
  • 摘要:今天在看lucene源代码是看到其中的Store、Index等几个枚举类型里面不仅定义了方法,而其实例中也定义了方法,晚上回来又学习了一下Enum,整理写了这个博客。第一个代码片段:packagecom.lfl.em;publicenumCoin{penny("10p"),dollor("20$"),rmb("30¥");privateStringvalue;publicStringgetValue(){returnvalue;}Coin(Stringvalue){this
  • 标签:例子 Java 应用 枚举

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

第一个代码片段:

class="java" name="code">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。

?

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

?

上一篇: Exception occurred during processing request: null 下一篇: 没有下一篇了!
发表评论
用户名: 匿名