目录
1、认识枚举
2、Enum类与enum关键字
3、集合对枚举的支持
4、带构造方法的枚举
5、让枚举实现接口
6、在枚举中定义抽象方法
1、认识枚举
在JDK 1.5之后,使用关键字enum定义一种新的类型,称为枚举类型。
2、Enum类与enum关键字
使用enum关键字定义的枚举类,实际上就相当于定义了一个类,此类继承了Enum类而已。
Enum类中定义了如下的方法:
3、集合对枚举的支持
在JDK 1.5之后,对于Set和Map接口而言又增加了两个新的子类:EnumSet、EnumMap两个类。
4、带构造方法的枚举
枚举也可以写构造方法 但不允许外部调用 所以只能在对象上使用
如 RED(10)
枚举不允许从外部调用 所以它的构造方法一定是私有的private
public enum Color {
RED(10),BLUE(10);
private Color() {}
private int color;//可以定义属性
private Color(int color){
this.color = color;
}
}
5、让枚举实现接口
interface Info {
public String getColor();
}
public enum Color implements Info {
RED {
public String getColor() {return "红色";}
},
GREEN {
public String getColor() {return "绿色";}
},
BLUE {
public String getColor() {return "蓝色";}
};
}
6、在枚举中定义抽象方法
public enum Color{
RED {
public String getColor() {return "红色";}
},
GREEN {
public String getColor() {return "绿色";}
},
BLUE {public String getColor() {return "蓝色";}
};
public abstract String getColor();
}
在枚举中定义抽象方法
需要重写
重写后
调用 返回red这个字符串
枚举是用来保证类型只有指定范围内的值
枚举可以实现单例设计模式
当枚举里只有一个类型的话( 我们说 枚举里面的一个值就是一个对象)
只要一个值时 那就只有一个对象
所以可以实现单例设计模式
枚举是一种类型 跟接口、类同等级 所以相比使用常量来说 占用内存空间更大一些
EnumDemo
package com.vince;
import org.junit.Test;
import java.util.Arrays;
import java.util.EnumMap;
import java.util.EnumSet;
/**
* Created by vince on 2017/6/16.
*/
public class EnumDemo {
public static final int RED = 0x1;
public static final int GREEN = 0x2;
public static final int BLUE = 0x3;
public int color;
@Test
public void test1(){
color = RED;
color = 4;
}
public Color colorEnum;
@Test
public void test2(){
// colorEnum = Color.RED;
// colorEnum = Color.BLUE;
colorEnum = Color.GREEN;
System.out.println(colorEnum);
System.out.println(colorEnum.name());
System.out.println(colorEnum.ordinal());
System.out.println(colorEnum.toString());
Color[] values = Color.values();
System.out.println(Arrays.toString(values));
}
@Test
public void test3(){
EnumSet<Color> set = EnumSet.allOf(Color.class);
for(Color c: set){
System.out.println(c);
}
EnumMap<Color,String> map = new EnumMap<>(Color.class);
map.put(Color.RED,"red");
map.put(Color.GREEN,"green");
map.put(Color.BLUE,"blue");
}
@Test
public void test4(){
System.out.println(Color.RED.getColor());
System.out.println(Color.RED.getColor2());
}
//使用枚举实现单例设计模式
@Test
public void test5(){
Singleton.SINGLETON.method();
}
}
定义枚举类型
package com.vince;
/**
* Created by vince on 2017/6/16.
* 定义一个枚举类型
*/
public enum Color implements Info{
RED(10) {
@Override
public String getColor2() {
return "red";
}
},GREEN(20) {
@Override
public String getColor2() {
return "green";
}
},BLUE {
@Override
public String getColor2() {
return "blue";
}
};
private int color;
private Color(){
System.out.println("无参构造器");
}
private Color(int color){
this.color = color;
System.out.println("有参构造器");
}
@Override
public int getColor() {
return color;
}
public abstract String getColor2();
}
接口
package com.vince;
/**
* Created by vince on 2017/6/16.
*/
public interface Info {
public int getColor();
}
枚举只有一个对象
package com.vince;
/**
* Created by vince on 2017/6/16.
*/
public enum Singleton {
SINGLETON;
public void method(){
System.out.println("method");
}
}