`

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中的枚举 转 可以了,够了 包括EnumSet(Map)

    这篇博客将深入探讨Java枚举的特性和使用方法,包括`EnumSet`和`EnumMap`这两个与枚举相关的数据结构。 首先,枚举定义的基本语法是`public enum EnumName {constant1, constant2, ...}`。每个枚举常量都是`...

    Java手动方式创建枚举类示例

    Java枚举类型的应用场景: * 定义一组具有相同特征的常量 * 实现状态机和事件处理 * 实现配置和设置 Java枚举类型的注意事项: * 枚举类型的构造器应该是私有的 * 枚举类型的成员变量应该是final的 * 枚举类型的...

    Java枚举数据类型.pdf

    总结来说,Java枚举类型是int枚举模式和String枚举模式的完美替代品。它不仅提供了更为严格和清晰的类型安全特性,还极大地提升了代码的可读性和易用性。在现代Java应用中,枚举类型被广泛用于替代旧有的枚举模拟...

    java enum枚举教程学习资料

    Java枚举(enum)是Java语言提供的一种特殊的数据类型,用于定义一组有限的常量,这些常量在程序中作为固定的值使用。枚举在Java中是类的子类型,因此,它们具备类的一些特性,比如可以有方法、变量以及实现接口。...

    重难点之JAVA枚举.pdf

    在这个例子中,`Color`类的构造方法被私有化,确保外部不能直接创建新的实例,只能通过`getInstance`方法获取`RED`, `GREEN`, `BLUE`这三个预定义的颜色。这种方式虽然可以实现类似枚举的功能,但存在一定的局限性,...

    枚举和泛型的应用举例

    在这个例子中,`processEnum`方法接收一个枚举类作为参数,通过反射获取枚举的所有值并打印出来。 总结来说,枚举和泛型是Java编程中的重要工具,它们各自解决了特定的问题,并且可以协同工作以提供更强大的功能。...

    java中枚举的详细使用介绍

    在这个例子中,`Gender`枚举有两个实例`MALE`和`FEMALE`,每个都有一个关联的名称。 总的来说,Java的枚举提供了一种强类型、安全、可读性高的方式来定义一组固定的值。它们可以包含方法、字段,并能与`switch`语句...

    Java中的Enum枚举用法.doc

    - 在上面的例子中,`Sex`枚举包含了两个值`MALE`和`FEMALE`;`Color`枚举包含了三个值`RED`、`GREEN`和`BLUE`。 2. **复杂枚举定义:** - 枚举不仅限于简单的常量定义,还可以拥有构造函数、方法和字段等。 ```...

    Java个人练习的例子

    在这个"Java个人练习的例子"中,我们可以看到作者通过实际的代码示例来加深对Java语言的理解,尤其是XML(eXtensible Markup Language)解析方面的应用。 XML是一种用于标记数据的通用标准,它允许数据在不同的系统...

    枚举的应用例题

    6. 枚举在实际应用中的例子: - 在设计模式中,枚举常用于实现有限状态机,表示状态之间的转换。 - 在图形用户界面编程中,颜色枚举可以用来表示不同颜色选项。 - 在日期和时间处理中,枚举可以用于表示星期几。 ...

    枚举小结

    在Java中,可以直接使用`==`比较两个枚举变量是否相等,因为它们都是单例的。在C#中,枚举值可以通过`Equals`或`==`进行比较。 在工具方面,一些IDE(如IntelliJ IDEA,Visual Studio)提供了枚举代码自动生成和...

    2022年掌握JDK1.5枚举类型Java教程.docx

    以下是关于Java枚举类型的一些关键知识点: 1. 构造函数:枚举类无法拥有公共构造函数,这意味着外部代码无法直接创建新的枚举实例,确保了枚举的唯一性。 2. 枚举常量属性:枚举类型的每个实例(枚举常量)都是...

    5-java进阶-枚举与注解1

    每个常量都有两个字符串参数。 枚举的特点 枚举有以下几个特点: * 枚举是一种特殊的类,它继承自 java.lang.Enum 类。 * 枚举中的常量是public、static、final 的。 * 枚举可以使用toString()方法来获取枚举的...

    java enum 枚举的spring boot2.x完美实现demo源码

    以下是如何在枚举中定义属性和方法的一个例子: ```java public enum Status { ACTIVE("活跃"), INACTIVE("非活跃"); private String description; Status(String description) { this.description = ...

    枚举例子源码

    在这个例子中,`Color`枚举定义了三个常量:RED、GREEN和BLUE。这些常量可以直接使用,无需实例化。枚举可以包含方法,甚至可以继承其他类或接口,从而增加其功能。 在C#中,枚举的定义方式略有不同: ```csharp ...

    枚举和简单反射

    在Java编程语言中,枚举(Enum)和反射(Reflection)是两个非常重要的特性,它们在实际开发中有着广泛的应用。下面将详细讲解这两个概念及其使用技巧。 **枚举(Enum)** 枚举是一种特殊的类,它允许我们定义一组...

    Java2实用教程(第5版)习题解答及例子代码.zip

    这两个特性在实际开发中应用广泛。 8. **泛型**:泛型是Java 5引入的新特性,增强了类型安全性,允许在类、接口和方法中使用类型参数。通过例子代码,学习者可以理解泛型的用法和好处。 9. **Swing和AWT**:Java的...

    java代码-java enum枚举遍历

    在这个例子中,`Color`枚举包含了三种颜色及其对应的十六进制代码。可以访问这些属性和调用方法: ```java for (Color color : Color.values()) { System.out.println("Color " + color + " has hex code " + ...

    枚举(switch、覆盖枚举、实现接口等)

    `Food`接口定义了两个枚举类型`Coffee`和`Dessert`,它们都实现了`Food`接口。这种方式使得枚举可以根据类别进行分组,方便管理和使用。 枚举类型的使用显著提高了代码的结构性和可维护性。它们可以提供类型安全,...

Global site tag (gtag.js) - Google Analytics