`
月迷津渡
  • 浏览: 102397 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java基础——枚举类型(enum)

 
阅读更多

这篇文章主要介绍一下Java中的枚举类型。

从字面意思看枚举类型即是可数的有限的对象集合。所以枚举类型的适用范围也就很显而易见。比如用枚举类型标识'季节',或者'月份'等等。

在实现枚举类型之前,先大致介绍归纳一下枚举类型所拥有的一些特性。1:枚举类型中的对象一般是固定不变的;2:不能对枚举类型中的对象设值;3.枚举类型需要提供遍历方法。我们不妨拿'季节'作为例子先来自己实现一个满足上述条件的枚举类型。代码如下:

 

class Season {

	//The enumerable objects' fields will not change once initialized in constructor.
	//so use final as modifier
	private final String name;
	private final String desc;
	
	private Season(String name, String desc) {
		this.name = name;
		this.desc = desc;
	}

	//Only provide get method for enumerable objects' fields,since they are never changed.
	public String getName() {
		return name;
	}

	public String getDesc() {
		return desc;
	}

	//The enumerable object is immutable once initialized.
	//so use final modifier
	public static final Season SPRING = new Season("Spring", "warm");
	public static final Season SUMMER = new Season("Summer", "hot");
	public static final Season AUTUMN = new Season("Autumn", "cool");
	public static final Season WINTER = new Season("Winter", "cold");

	//Provide enumeration method for the enumerable object
	public static List<Season> values() {
		List<Season> seasonList = new ArrayList<Season>();
		seasonList.add(Season.SPRING);
		seasonList.add(Season.SUMMER);
		seasonList.add(Season.AUTUMN);
		seasonList.add(Season.WINTER);
		return seasonList;
	}

}

 

 

 

上述代码基本按照自己的理解实现了枚举特性,但是相比jdk5提供的枚举却显的笨重。于是乎先给出对应的jdk5以上的Season枚举类,并会在之后对其中的代码做讲解。代码如下:

 

enum EnumSeason {

	//Simplified object declaration and initialization.
	SPRING("Spring","warm"),
	SUMMER("Summer","hot"),
	AUTUMN("Autumn","cool"),
	WINTER("Winter","cold");
	
	private final String name;
	private final String desc;
	
	private EnumSeason(String name, String desc) {
		this.name = name;
		this.desc = desc;
	}
	
	public String getName() {
		return name;
	}

	public String getDesc() {
		return desc;
	}
	
}
 

 

你也许会发现这段代码在枚举对象构造的时候十分的方便,其实这种方式简化了原先public static final这些修饰符声明,但是还是表示同样的含义,此外你会发现这段代码中没有为枚举类提供枚举方法。这并不是代码的疏漏,而是jdk对以enum声明的枚举类已经默认的提供了这个方法,我们可以用以下的代码来对枚举类中的对象进行一个遍历。代码如下:

 

public class Testenum {
	public static void main(String args[]) {
		EnumSeason[] seasons = EnumSeason.values();
		for(EnumSeason e: seasons){
			System.out.println(e.getName() +"-" +e.getDesc());
		}		
	}
}

 

result:

 

 

Spring-warm

Summer-hot

Autumn-cool

Winter-cold


结果如你所见的呈现在眼前。至此,枚举的基本特性已经讲完。

 

最后需要强调两个关于枚举的重要的用法。其一,jdk5开始对switch控制语句进行的强化,支持switch的内容从原先的int,byte,char和short又增加了一个enum对象。对于enum的switch,具体的case只需要写上enum类型的具体对象即可。代码如下:

 

public class Testenum {
	public static void main(String args[]) {
		EnumSeason season = EnumSeason.SPRING;

		switch (season) {
		case SPRING:
			System.out.println("this is spring");
			break;
		case SUMMER:
			System.out.println("this is summer");
			break;
		case AUTUMN:
			System.out.println("this is autumn");
			break;
		case WINTER:
			System.out.println("this is winter");
			break;
		default:
			break;
		}

	}
}
 

其二,如何为enum类实现接口方法,它的实现可以完全和class相同,但是我们注意到当我对这个接口的实现因为枚举类中的不同对象而不同。那又当如何呢?假定我们有这样一个接口。代码如下:

 

public interface Quarter {
	void quarterDef();
}

 

那我们最普通的做法可以让enum实现Quarter接口,然后实现方法。方法中根据name属性来区分当前是那个枚举对象,然后通过if/else语句进行逻辑处理。当然我们更为推荐的做法是匿名内部类实现这样的接口方法。代码如下:

 

enum EnumSeason implements Quarter{

	// Simplified object declaration and initialization.
	SPRING("Spring", "warm"){
		@Override
		public void quarterDef() {
			System.out.println("this is the first quarter");
		}
	},
	SUMMER("Summer", "hot"){
		@Override
		public void quarterDef() {
			System.out.println("this is the second quarter");
		}
	},
	AUTUMN("Autumn", "cool"){
		@Override
		public void quarterDef() {
			System.out.println("this is the third quarter");			
		}
	},
	WINTER("Winter", "cold"){
		@Override
		public void quarterDef() {
			System.out.println("this is the forth quarter");
		}
	};

	private final String name;
	private final String desc;

	private EnumSeason(String name, String desc) {
		this.name = name;
		this.desc = desc;
	}

	public String getName() {
		return name;
	}

	public String getDesc() {
		return desc;
	}
}

 这样的代码是不是更优雅更面向对象呢。

 

至此Java的枚举类型已经介绍完了。

 

在自己做了个笔记的同时也希望上述内容能对大家有所帮助。

分享到:
评论

相关推荐

    Java期末复习——枚举与反射机制

    public enum 枚举类型名称{ 枚举对象1, 枚举对象2, ..., 枚举对象n; } ``` 枚举类型的数据可以通过`.values()`方法获取一个枚举对象的数组,便于遍历和处理。在`switch`语句中使用枚举时,只需直接使用枚举对象,...

    JDK5.0新特性(3)——枚举

    枚举类型是一种特殊的类,可以通过关键字`enum`来定义。例如,创建一个表示星期的枚举类型: ```java public enum Weekday { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } ``` 2. ...

    java算法——玩家扑克牌

    在Java中,可以使用枚举类型(`enum`)来定义花色(如红桃、黑桃、梅花、方块)和点数(2到10、J、Q、K、A)。这样做的好处是枚举提供了固定的值,避免了错误的输入。 ```java public enum Suit { HEARTS, SPADES...

    Java高新技术_java5的枚举的基本应用

    Java高新技术——Java 5的枚举(Enum)基本应用 在Java编程语言中,枚举是一种特殊的类,用于定义一组预定义的常量。自从Java 5引入枚举类型以来,它已经成为处理固定集合常量的首选方式,因为它提供了比传统整数...

    Java编程基础教程:枚举与泛型的深入讲解

    内容概要:本文深入介绍了Java中的两个重要特性——枚举和泛型。首先详细讲述了枚举的基本概念、枚举类型的特点及其实现方式,如枚举的成员方法、构造器以及如何将其用于高级编程场合。其次对泛型的概念进行了解释,...

    MLDn学习笔记 —— JDK新特性(枚举)

    枚举类型与Java的`switch`语句配合使用,可以替代传统的if...else if...else结构,使代码更清晰、易读: ```java DayOfWeek day = DayOfWeek.MONDAY; switch (day) { case MONDAY: System.out.println("星期一"); ...

    动力节点老杜Java基础入门学习教程分享——常用类

    ### 动力节点老杜Java基础入门学习教程分享——常用类 #### String 类 - **不可变性**:`String` 类是不可变的,这意味着一旦一个 `String` 对象被创建,它的值就不能被更改。例如,如果你有一个 `String s = ...

    java实现高效的枚举元素集合示例

    然而,Java提供了一个特殊类型的集合——`EnumSet`,它是专门为枚举类型设计的高效集合实现。 `EnumSet`集合类提供了与普通集合不同的性能优势,特别是对于枚举类型的操作。`EnumSet`是线程安全的,并且在内部使用...

    java学习笔记(11) 第11 章 - 枚举和注解(csdn)————程序.pdf

    因此,引入枚举类可以更好地解决这个问题,确保枚举类型只能包含预定义的几个值。 11.2 问题解析 枚举类型的特点是: - 枚举值是有限的,如季节的四个值。 - 枚举对象通常是只读的,不允许修改。 11.3 自定义类...

    《面向对象程序设计——Java语言》电子课件(程细柱PPT)

    7. 枚举与注解:Java中的枚举(Enum)类型是常量的集合,提供了安全且可读性高的数据表示方式。注解(Annotation)则是一种元数据,可以用于代码的编译时和运行时处理。 8. 异常处理:Java中的异常处理机制(try-...

    511.509.JAVA基础教程_枚举类与注解-jdk8新特性:类型注解(511).rar

    本教程主要聚焦于Java中的枚举类、注解以及JDK 8引入的新特性——类型注解。通过深入理解这些概念,开发者可以更好地掌握Java的高级特性,提高代码的可读性、可维护性和安全性。 首先,我们来探讨枚举类(Enum)。...

    Enum的用法

    `Enum`,作为Java语言中的一个关键字,自JDK 5.0引入以来,便赋予了开发者一种全新的数据类型——枚举类型,其设计初衷在于为编程提供更安全、更简洁的方式来处理固定集合的常量。不同于传统意义上的类,`Enum`拥有...

    Java泛型枚举与For语句的简化写法PPT教案学习.pptx

    泛型枚举是Java中的一种枚举类型,它允许在枚举类型中定义泛型参数。泛型枚举可以使枚举类型更加灵活和通用。 在Java中,枚举类型可以使用泛型参数,例如: ```java public enum Color&lt;T&gt; { RED, GREEN, BLUE; ...

    java面向对象程序设计——董小园著

    8. 枚举(Enum):Java中的枚举类型是一种特殊的类,用于表示有限集合中的值。枚举可以有自己的方法和常量,且默认继承自java.lang.Enum类。 9. 内部类(Inner Class):Java允许在一个类的内部定义另一个类,这被...

    java程序设计——基于JDK6和NetBeans实现第4章课后作业答案.pdf

    通过调用`values()`方法,我们可以获取枚举类型的全部实例,然后遍历并打印它们。所以,第5行的`Ball.T.values()`将返回一个包含所有枚举常量的数组,然后循环遍历数组并打印它们。 3. 嵌套类的构造器与方法调用: ...

    使用java基础知识实现猜拳游戏.zip

    2. **枚举类型(Enum)**:猜拳游戏有三种可能的选择:剪刀、石头和布。在Java中,可以使用枚举类型来定义这些选项,使得代码更加结构化且易于理解。 3. **随机数生成**:为了让计算机出拳具有随机性,项目可能会...

    java jdk5.0学习笔记——良葛格

    3. **枚举类型(Enum)**:Java 5.0添加了枚举,用于定义一组固定的常量,提高了代码的可读性和安全性。例如,enum Color {RED, GREEN, BLUE}定义了一个颜色的枚举。 4. **枚举实例方法**:枚举可以拥有自己的方法...

    enum-converter:枚举的自定义转换器

    总之,枚举的自定义转换器是Java开发中一个实用的工具,它使得枚举类型能够更灵活地与其他数据格式进行互换。通过实现不同的转换器,我们可以方便地处理枚举与字符串、整数或其他复杂对象之间的转换,提高代码的...

Global site tag (gtag.js) - Google Analytics