JAVA 枚举

枚举:被定义为枚举的类,则里面可以定义有限的对象类型,每一种类型表示该类的一种对象。

 

1.定义枚举类用关键字enum来修饰类,然后在该类里面直接添加相应的对象名称即可,如:

enum Fruit{
	APPLE,ORANGE,BANANA;
}

用关键字enum来修饰一个类后,其实该类就默认继承了java.lang.Enum类,也就会默认调用该类的构造方法,因此枚举类本身无需重新定义构造方法,当然也可以自定义;

完成定义后,就可以进行枚举的对象调用,调用方式如下:

Fruit fruit1 = Fruit.APPLE;
Fruit fruit2 = Fruit.ORANGE;
Fruit fruit3 = Fruit.BANANA;
System.out.println(fruit1.name());
System.out.println(fruit2.name());
System.out.println(fruit3.name());

这里枚举类内每个类型对象的名字就是他本身的变量名,如果要进行另定义名字,则可以在定义枚举类的时候另附名:

enum Fruit{
	APPLE("苹果"),ORANGE("桔子"),BANANA("香蕉");//这时,对象初始化需要按照自定义的构造函数来
	private String name = "";
	private Fruit(String name){
		this.name = name;
	}
	public String getName(){
		return name;
	}
}

这时可以用如APPLE.getName()的方法来去的自定义名字。

注:由于Enum类中的name()方法是finnal定义的,因此无法重写,因此如果调用name()方法还是返回变量名;


2.列举遍历枚举类型。

运用values()方法,即可获得枚举中的所有类型对象: 

for(Fruit f:Fruit.values()){
    System.out.println(f.name());
}

这里的values()方法是属于枚举类型预定义函数,是在java.lang.annotation.ElementType下的一个函数,返货枚举对象数组。

3.由于Enum类实现了Comparable接口,所以可以对他进行自动排序,默认是按照对象变量名进行排序的,因为在Enum类中,已经把compareTo()函数定义为final类型,因此无法再次实现接口以及重写重写函数了,只能按照父类的排序规定:

Set<Fruit> fset = new TreeSet<Fruit>();//排序类集
fset.add(Fruit.APPLE);
fset.add(Fruit.BANANA);
fset.add(Fruit.ORANGE);
Iterator<Fruit> it = fset.iterator();
while(it.hasNext()){
	System.out.println(it.next().name());
}

 

4.对枚举类型的类集操作,除了像上面中的那样常规操作,类集有对枚举的特别支持,可以整体性的对枚举类型进行添加:

Set<Fruit> fset =EnumSet.allOf(Fruit.class);
Iterator<Fruit> it = fset.iterator();
while(it.hasNext()){
	System.out.println(it.next().name());
}

EnumSet没有构造方法,用allOf来返回对象;当然也可以通过public static <E extendsEnum<E>>EnumSet<E>of(E e)方法来进行单个元素的添加并返回类集对象;或者用public static <E extendsEnum<E>>EnumSet<E>noneOf(Class<E> elementType)方法返回空集合对象,并后续用add()来添加元素。(更多方法可以参考EnumSet类文档)。

 

此外还有一个EnumMap也是对枚举类的支持,操作与上类似,这里不再具体介绍。

 

5.对于枚举类要继承接口或者定义抽象函数,必须对于枚举类中每个对象实现抽象函数:

interface Print{
	public void show();
};
enum Fruit implements Print{
	APPLE("苹果"){
		public void show(){
			System.out.println(getName());
		}
	},ORANGE("桔子"){
		public void show(){
			System.out.println(getName());
		}
	},BANANA("香蕉"){
		public void show(){
			System.out.println(getName());
		}
	};
	private String name = "";
	private Fruit(String name){
		this.name = name;
	}
	public String getName(){
		return name;
	}	
};

至此,完成每个对象对接口的不同实现。


 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值