枚举

枚举

枚举在JDK1.5之后添加,在1.5之前定义类似于枚举的过程是在类中定义私有的构造方法,在本类中自己实例化本身的构造方法添加一些属性,例如 颜色等等,并通过pubilc 来给私有的属性赋值,可以通过调用getInstance 方法来赋值 switch case 来限制属性的选择。
	public static Color getInstance(int i) {
		switch (i) {
		case 1:
			return RED;
			break;
		case 2:
			return 	GREEN;
		case 3:
			return BLUE;
			break;
		}
	}





经过1.5之后就有了枚举的概念,通过关键字(enum)来声明为枚举类,自动实现了comparable 接口,使其变为有序的,且自动继承了Enum类,所以枚举类特点是:可以实现多个接口,不能再次继承
 public enum 类名 {
Video,music,txt
}
一般来说我们会在用这些属性的时候会进行备注,这样的代码可读性会比较低,所以通过一些方法来进行注释。
public enum Entity {
	Video("视频"),Music("音乐"),Txt("文本");//相当于实例化三个对象
	private  String value;                             // 定义“”类型名称
	public String getValue() {
		return value;
	}
	public void setValue(String value) {    
		this.value = value;
	}
	Entity(String value){
		this.value=value;
	}
}





值得注意的是Video("视频"),Music("音乐"),Txt("文本"),如果这下面有方法的话在这行后面一定加上分号 此处的构造方法目的其实是Video("视频"),Music("音乐"),Txt("文本") 这三个实例化,值得注意的是这边的构造方法和普通类的构造方法不太一样,此处的构造方法只能由private修饰,而private修饰只能本类自己使用。这边通过set get 方法来改变名称。枚举类可以放抽象方法但是必须要在元素列表中声明。
因为自动继承了Enum类所以就可以使用Enum中的方法(Enum属于java.lang中的包),有些常用的方法
tostring(),显示枚举类元素。ordinal() 读取下标。values()返回的是枚举类型的数组,valueof() 返回枚举类型元素 里面放入枚
举类和枚举类里的内容 其方法就是将此内容提取出来,上代码
import java.util.EnumMap;
import java.util.EnumSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class Fileenum {
	public static void main(String[] args) {
		Entity entity=Entity.Music;// 提取枚举类里的信息music 
		entity.setValue("音乐人");
		System.out.println(entity.name()+entity.getValue());
		for(Entity b:entity.values()) {//values方法是将entity 转为entity[]数组
			System.out.println(b+b.getValue()+b.ordinal());
		}
		/*
		 * Entity只是个类型  allof 是将Entity里的全复制到指定集合里
		 * 然后移除enu中的一项
		 * complementof 是将比较原enu里的 将现有的且缺少的放进enumset 集合里
		 * noneof 指定一个枚举类型的空集合
		*/
		EnumSet<Entity> enu=EnumSet.allOf(Entity.class);
		enu.remove(entity);
		EnumSet<Entity> en=EnumSet.complementOf(enu);
		EnumSet<Entity> en1=EnumSet.noneOf(Entity.class);
		/*
		 * 枚举里集合 EunmMap 是键值对集合  此处构造方法是构造了只能存放Entity类型的参数
		 * map里的所有功能都可以用
		 * 也可以遍历Map集合里的内容
		 */
		EnumMap<Entity, String> enummap=new EnumMap<>(Entity.class);
		enummap.put(entity, "音乐");
		enummap.put(Entity.Txt, "文本");
		/*
		 * 遍历集合的过程
		 */
		Set<Map.Entry<Entity, String>> set=enummap.entrySet();
		Iterator<Entry<Entity, String>> it=set.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}
	}
}


上述代码中涉及到了新的知识,在集合中有对枚举的支持EnumSet,EnumMap。
EnumSet 是set接口的子类,所以里面的内容不能重复。在Api中并没有关于构造方法的EnumSet的类需要使用本类的提供的静态方法。 
EnumMap是Map接口的子类,Map里所有的方法都可以使用。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值