Java 枚举7个特性

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29451823/article/details/82888555

**在JDK1.5 之前,我们定义常量都是: public static final… 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。 **

  1. 自定义枚举
package cn.itcast.test;

/**
 * 自定义枚举方法
 * 
 * @author cjj
 * @date 2018年9月28日
 * @email [email protected]
 * @blog blog.csdn.net/qq_29451823
 */
public enum MyEnumTest1 {
	CJJ("帅气", 1), LX("成熟", 2), LQ("老气", 3);

	private String name;
	private Integer index;

	// 其中构造方法的访问权限必须比类的权限小
	private MyEnumTest1(String name, Integer index) {
		this.name = name;
		this.index = index;
	}

	public static String getName(Integer index) {
		for (MyEnumTest1 c : MyEnumTest1.values()) {
			if (c.getIndex() == index) {
				return c.getName();
			}
		}
		return null;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getIndex() {
		return index;
	}

	public void setIndex(Integer index) {
		this.index = index;
	}
}

  1. 主函数运行
package cn.itcast.test;
/**
 * 主函数入口
 * @author cjj
 * @date 2018年9月28日
 * @email [email protected]
 * @blog blog.csdn.net/qq_29451823
 */
public class MainTest {

	public static void main(String[] args) {
		for(int i=1 ; i <= MyEnumTest1.values().length ; i++) {
			System.out.println("第"+i+"个元素是:"+MyEnumTest1.getName(i));
		}
	}

}

3.运行结果
在这里插入图片描述
4.重写ToString 方法
在这里插入图片描述

package cn.itcast.test;
/**
 * 主函数入口
 * @author cjj
 * @date 2018年9月28日
 * @email [email protected]
 * @blog blog.csdn.net/qq_29451823
 */
public class MainTest {

	public static void main(String[] args) {
		for(int i=1 ; i <= MyEnumTest1.values().length ; i++) {
			System.out.println("第"+i+"个元素是:"+MyEnumTest1.getName(i));
			//根据具体的枚举名称来寻找对应的枚举常量
			MyEnumTest1 test = MyEnumTest1.GetMyEnumTest1("CJJ");
			System.out.println(test);
		}
		
	}
	
}

运行效果:
在这里插入图片描述
5.实现接口
自定义接口MyInterceptor

package cn.itcast.test;

public interface MyInterceptor {
    void printf();
    String getInfo();
}

枚举实现接口

package cn.itcast.test;

/**
 * 自定义枚举方法
 * 
 * @author cjj
 * @date 2018年9月28日
 * @email [email protected]
 * @blog blog.csdn.net/qq_29451823
 */
public enum MyEnumTest1 implements MyInterceptor{
	CJJ("帅气", 1), LX("成熟", 2), LQ("老气", 3);

	private String name;
	private Integer index;

	// 其中构造方法的访问权限必须比类的权限小
	private MyEnumTest1(String name, Integer index) {
		this.name = name;
		this.index = index;
	}

	public static String getName(Integer index) {
		for (MyEnumTest1 c : MyEnumTest1.values()) {
			if (c.getIndex() == index) {
				return c.getName();
			}
		}
		return null;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getIndex() {
		return index;
	}

	public void setIndex(Integer index) {
		this.index = index;
	}
	
	public static MyEnumTest1 GetMyEnumTest1(String input) {
		return valueOf(input);
	}
	
	@Override
	public  String toString() {
		return "MyEnumTest1[ " + this.index + this.name + " ] ";
	}

	@Override
	public void printf() {
		//name 代表枚举中常量中具体的参数
		System.out.println(this.index + this.name);
	}

	@Override
	public String getInfo() {
		//其中name()代表具体的枚举种常量名
		return this.name();
	}
}

主函数类

package cn.itcast.test;
/**
 * 主函数入口
 * @author cjj
 * @date 2018年9月28日
 * @email [email protected]
 * @blog blog.csdn.net/qq_29451823
 */
public class MainTest {

	public static void main(String[] args) {
//		for(int i=1 ; i <= MyEnumTest1.values().length ; i++) {
//			System.out.println("第"+i+"个元素是:"+MyEnumTest1.getName(i));
//			//根据具体的枚举名称来寻找对应的枚举常量
//			MyEnumTest1 test = MyEnumTest1.GetMyEnumTest1("CJJ");
//			System.out.println(test);
//		}
		MyInterceptor test2  = MyEnumTest1.CJJ;
		test2.printf();
		System.out.println(test2.getInfo());
	}
	
}

运行结果
在这里插入图片描述
6.在接口内部写枚举实现接口

package cn.itcast.test;

/**
 * 枚举在接口的内部
 * @author cjj
 * @date 2018年9月28日
 * @email [email protected]
 * @blog blog.csdn.net/qq_29451823
 */
public interface AtInterfaceInnnerEnum {
	enum Coffee implements AtInterfaceInnnerEnum {
		LEFT_COFFEE,HEAD_COFFEE,RIGHT_COFFEE,BOTTON_COFFEEE;
	}
	
	enum Dessert implements AtInterfaceInnnerEnum {
		LIKE_DESSERT,HEAT_DESSERT;
	}
}

主函数

package cn.itcast.test;

import cn.itcast.test.AtInterfaceInnnerEnum.Dessert;

/**
 * 主函数入口
 * @author cjj
 * @date 2018年9月28日
 * @email [email protected]
 * @blog blog.csdn.net/qq_29451823
 */
public class MainTest {

	public static void main(String[] args) {
		for(AtInterfaceInnnerEnum.Coffee c : AtInterfaceInnnerEnum.Coffee.values()) {
			System.out.println(c);
		}
		AtInterfaceInnnerEnum inEnum = AtInterfaceInnnerEnum.Coffee.BOTTON_COFFEEE;
		System.out.println(inEnum);
		AtInterfaceInnnerEnum inEnum1 = AtInterfaceInnnerEnum.Dessert.LIKE_DESSERT;
		System.out.println(inEnum1);
	}
	
}

运行结果
在这里插入图片描述
7.java.util.EnumSet和java.util.EnumMap是两个枚举集合。

package cn.itcast.test;

import java.util.EnumMap;
import java.util.EnumSet;
import java.util.Iterator;
import java.util.Map;

/**
 * 主函数入口
 * @author cjj
 * @date 2018年9月28日
 * @email [email protected]
 * @blog blog.csdn.net/qq_29451823
 */
public class MainTest {

	public static void main(String[] args) {
		//创建一个元素就是MyEnumTest1类型的元素的集合
		EnumSet st1 = EnumSet.allOf(MyEnumTest1.class);
		System.out.println(st1);//输出[MyEnumTest1[ 1帅气 ] , MyEnumTest1[ 2成熟 ] , MyEnumTest1[ 3老气 ] ]
		//创建一个元素指定为MyEnumTest1类型的空集合
		EnumSet st2 = EnumSet.noneOf(MyEnumTest1.class);
		System.out.println(st2);//输出[]
		st1.add(MyEnumTest1.CJJ);
		st2.add(MyEnumTest1.LQ);
		System.out.println(st1);//输出[MyEnumTest1[ 1帅气 ] , MyEnumTest1[ 2成熟 ] , MyEnumTest1[ 3老气 ] ]
		System.out.println(st2);//输出[MyEnumTest1[ 3老气 ] ]
		EnumSet st3 = EnumSet.of(MyEnumTest1.CJJ,MyEnumTest1.LQ);//插入几个数据就有几个
		System.out.println(st3);//输出[MyEnumTest1[ 1帅气 ] , MyEnumTest1[ 3老气 ] ]
		EnumSet<MyEnumTest1> st4 = EnumSet.range(MyEnumTest1.CJJ, MyEnumTest1.LQ);//插入数据的范围
		System.out.println(st4);//输出[MyEnumTest1[ 1帅气 ] , MyEnumTest1[ 2成熟 ] , MyEnumTest1[ 3老气 ] ]
		//EnumMap集合
		EnumMap<MyEnumTest1,String> ma1 = new EnumMap<MyEnumTest1,String>(MyEnumTest1.class);
		System.out.println("map的枚举"+ma1);//输出map的枚举{}
		ma1.put(MyEnumTest1.CJJ, "爱你额");
		ma1.put(MyEnumTest1.LQ, "么么哒");
		System.out.println("map的枚举"+ma1);
		for(MyEnumTest1 mx : ma1.keySet()) {//用来遍历所有的KeySet()
			System.out.println("第一种"+ma1.get(mx));//打印对应的value值
		}
		//entrySet() 这个方法是将map里的每一个键值对取出来封装成一个Entry对象在存到一个Set里面。
		Iterator<Map.Entry<MyEnumTest1,String>> it = ma1.entrySet().iterator();
		while(it.hasNext()) {
			Map.Entry<MyEnumTest1,String> entry = it.next();
			System.out.println("第二种"+"key="+entry.getKey()+"value="+entry.getValue());
		}
		for(Map.Entry<MyEnumTest1,String> entry : ma1.entrySet()) {
			System.out.println("第三种"+entry.getValue());
			entry.setValue("123");
			System.out.println("改变value值后第三种"+entry.getValue());
		}
	}
	
}


猜你喜欢

转载自blog.csdn.net/qq_29451823/article/details/82888555
今日推荐