Java 枚举的几种用法

Java 枚举的几种用法

一、枚举常量

在JDK1.5 之前,定义常量的写法为: public static fianl… 。JDK1.5之后,就有了枚举类型,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。
枚举类型的定义和class的定义很相像,下面是枚举类型的简单定义:

 enum Myenum{  
   BIG,MEDIUM,SMAll  
 }

其中enum是用来生命枚举类的关键字,BIG,MEDIUM,SMALL是枚举变量。

二、switch case

JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。


public class TestEnum {
//声明枚举类(此处为内部类,可以直接拿到外部)
	enum Myenum{  
 	  BIG,MEDIUM,SMAll  
 	}
//主方法中使用枚举变量
	public static void main(){
		Myenum m = Myenum.MEDIUM;
		switch(m){
			case BIG:
				System.out.println("大大大");
			case MEDIUM:
				System.out.println("中中中");
			case SMAll:
				System.out.println("小小小");
		}
	}
 }

因为变量m的值是枚举变量的MEDIUM,所以对应case为MEDIUM的语句。
控制台输出为:中中中

三、枚举类的构造器

枚举类的构造器一定要私有,来防止从外部进行实例化(也就是不让在其他地方写:Myenum a =new Myenum(“a”); )。 枚举类中的枚举常量(如BIG、MEDIUM)其实是枚举类的实例,所以枚举常量的参数类型必须与已有构造器的参数类型相同。
  下面是一个枚举类构造器的例子:

public enum Myenum {
		// 与其他类型的实例一样,枚举实例的参数应与构造器的参数一致
		BIG("大大大"), MEDIUM(20), SMALL("太小了", 10);
		private String str;
		private int i;
		// 枚举的构造器要私有,防止被修改,下面是三种构造器
		private Myenum(String str) {
			this.str = str;
		}
		private Myenum(int i) {
			this.i = i;
		}
		private Myenum(String str, int i) {
			this.str = str;
			this.i = i;
		}
}
//我们在这个类中对枚举进行测试
public class TestEnum {
	public static void main(String[] args) {
		Myenum m = Myenum.SMALL;
		System.out.println("Myenum 中的枚举常量SMALL中str:"+m.str+",i:"+m.i);
	}
}

输出结果:
Myenum 中的枚举常量SMALL中str:太短了,i:10

四、枚举中的自定义方法

和三中的其他地方一致,只多了对str和i的getter,setter方法。测试中用方法取出enum中的私有变量。

 public enum Myenum {
		// 与其他类型的实例一样,枚举实例的参数应与构造器的参数一致
		BIG("大大大"), MEDIUM(20), SMALL("太小了", 10);
		private String str;
		private int i;
		// 枚举的构造器要私有,防止被修改,下面是三种构造器
		private Myenum(String str) {
			this.str = str;
		}
		private Myenum(int i) {
			this.i = i;
		}
		private Myenum(String str, int i) {
			this.str = str;
			this.i = i;
		}
		//getter,setter方法
		public String getStr() {
	 		return str;
		}
		public void setStr(String str) {
			this.str = str;
		}
		public int getI() {
			return i;
		}
		public void setI(int i) {
			this.i = i;
		}
}
//我们在这个类中对枚举进行测试
public class TestEnum {
	public static void main(String[] args) {
		Myenum m = Myenum.SMALL;
		System.out.println("Myenum 中的枚举常量SMALL中str:"+m.getStr()+",i:"+m.getI());
	}
}

五、不能继承类,可以实现接口

所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。 但可以对接口进行实现。因为实现方法和普通类一样,这里就不进行实现了。

六、使用接口组织枚举

没有枚举之前,通常把常量放到接口中来管理。现在,把枚举放到接口中,更加方便管理。

public interface Animal{  
    enum Dog implements Animal{  
        BIG_DOG,MEDIUM_DOG,SMALL_DOG 
    }  
    enum Cat implements Animal{  
         BIG_CAT,MEDIUM_CAT,SMALL_CAT 
    }  
} 

七、其他

1.集合

两个枚举集合:java.util.EnumSet和java.util.EnumMap。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。详细可以参考JDK文档。

2.比较

枚举类型对象之间的值比较可以使用==,直接来比较值是否相等的。当然,也可以使用equals方法进行比较。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值