Java Enum类的几种用法

Java Enum类的几种用法

一、枚举常量

在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方法进行比较。

发布了5 篇原创文章 · 获赞 1 · 访问量 194

猜你喜欢

转载自blog.csdn.net/weixin_43584835/article/details/104051443