枚举 _Enum

1、掌握enum关键字与Enum 类的关系

2、了解Enum类中提供的常用方法


public abstract class Enum<E extends Enum<E>>

extends Object

implements Comparable<E>, Serializable

此类定义的时候使用了泛型机制,而且实现了 Comparable 接口以及 Serializable 接口,证明此种类型是可以比较,可以被序列化的。


Enum 类的构造方法

protected Enum(String name, int ordinal)

构造方法中接收两个参数,一个表示枚举的名字,另外一个表示枚举的序号。

public enum Color{

RED,GREEN,BLUE;

}

RED实际上就表示的是枚举的名称,默认的编号是0

public class GetEnumInfo{
	public static void main(String args[]){
		for(Color c:Color.values()){
			System.out.println(c.ordinal() + " --> " + c.name()) ;
		}
	}
};
如果此时,希望做一些改进,希望可以使用一些文字表示颜色的信息,则可以按照最早的 Color 类的形式。在枚举类中定义属性及自己的构造方法,但是一旦定义有参构造之后,在声明枚举对象的时候就必须明确的调用构造方法,并传递参数。

enum Color{
	RED("红色"),GREEN("绿色"),BLUE("兰色") ;
	private Color(String name){
		this.setName(name) ;
	}
	private String name ;			// 定义name属性
	public void setName(String name){
		this.name = name ;
	}
	public String getName(){
		return this.name ;
	}
}
public class ConstructorEnum{
	public static void main(String args[]){
		for(Color c:Color.values()){
			System.out.println(c.ordinal() + " --> " + c.name()
				+"(" + c.getName() + ")") ;
		}
	}
};
如果现在不想通过构造设置内容,而是希望通过 setter() 方法设置内容,则就必须按如下的方式执行;

enum Color{
	RED,GREEN,BLUE ;
	private String name ;			// 定义name属性
	public void setName(String name){
		switch(this){	// 判断操作的是那个枚举对象
			case RED:{
				if("红色".equals(name)){
					this.name = name ;	// 允许设置名字
				}else{
					System.out.println("设置内容错误。") ;
				}
				break ;
			}
			case GREEN:{
				if("绿色".equals(name)){
					this.name = name ;	// 允许设置名字
				}else{
					System.out.println("设置内容错误。") ;
				}
				break ;
			}
			case BLUE:{
				if("蓝色".equals(name)){
					this.name = name ;	// 允许设置名字
				}else{
					System.out.println("设置内容错误。") ;
				}
				break ;
			}
		}
		this.name = name ;
	}
	public String getName(){
		return this.name ;
	}
}
public class SetEnum{
	public static void main(String args[]){
		Color c = Color.BLUE ;	// 得到兰色
		c.setName("兰色") ;	 // 名字错误
		c.setName("蓝色") ;	 // 名字正确
		System.out.println(c.getName()) ;
	}
};
发现,使用构造方法似乎更方便一些。

enum Color{
	RED,GREEN,BLUE ;
	private String name ;			// 定义name属性
	public void setName(String name){
		switch(this){	// 判断操作的是那个枚举对象
			case RED:{
				if("红色".equals(name)){
					this.name = name ;	// 允许设置名字
				}else{
					System.out.println("设置内容错误。") ;
				}
				break ;
			}
			case GREEN:{
				if("绿色".equals(name)){
					this.name = name ;	// 允许设置名字
				}else{
					System.out.println("设置内容错误。") ;
				}
				break ;
			}
			case BLUE:{
				if("蓝色".equals(name)){
					this.name = name ;	// 允许设置名字
				}else{
					System.out.println("设置内容错误。") ;
				}
				break ;
			}
		}
		this.name = name ;
	}
	public String getName(){
		return this.name ;
	}
}
public class ValueOfEnum{
	public static void main(String args[]){
		Color c = Color.valueOf(Color.class,"BLUE") ;	// 得到兰色
		c.setName("兰色") ;	 // 名字错误
		c.setName("蓝色") ;	 // 名字正确
		System.out.println(c.getName()) ;
	}
};
对于枚举 .class 是随后要讲解的 java 反射机制中的内容,现在只需要按照此格式编写即可。

在枚举中实际上已经实现好了 Comparable 接口,所以枚举中的内容是可以排序的。

import java.util.Iterator;
import java.util.Set ;
import java.util.TreeSet ;
enum Color{
	RED,GREEN,BLUE ;
}
public class ComparableEnum{
	public static void main(String args[]){
		Set<Color> t = new TreeSet<Color>() ;	// 设置类型
		t.add(Color.GREEN) ;	// 加入绿色
		t.add(Color.RED) ;		// 加入红色
		t.add(Color.BLUE) ;		// 加入蓝色
		Iterator<Color> iter = t.iterator() ;
		while(iter.hasNext()){
			System.out.print(iter.next() + "、") ;
		}
	}
};
可以发现,按照序号进行排序的操作。

总结:

1、Enum 类的作用

2、enum 关键字与 Enum od r 关系。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值