enum 与普通 class 的异同
相同之处:
1.它们都可以定义一些属性和方法,
不同之处是:
1. enum不能new一个对象,只能在enum类里面定义好所有对象,而且对象不能重复
2. enum对象之间使用分号隔开,最后添加一个分号,对象需要定义在属性和方法前
3. enum 不能使用 extends 关键字继承其他类,因为 enum 已经继承java.lang.Enum(java是单一继承)
enum 对象的常用方法介绍
int
compareTo(E o)
比较此枚举与指定对象的顺序。
Class<E>
getDeclaringClass()
返回与此枚举常量的枚举类型相对应的 Class 对象。
String
name()
返回此枚举常量的名称,在其枚举声明中对其进行声明。
int
ordinal()
返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
String
toString()
返回枚举常量的名称,它包含在声明中。
static <T extends Enum<T>> T
valueOf(Class<T> enumType, String name)
返回带指定名称的指定枚举类型的枚举常量。
常用用法:
用法一:常量
public enum Color {
RED, GREEN, BLANK, YELLOW
}
用法二:在enum中添加属性和方法
public enum Dessert{
FRUIT(1,"fruit"), CAKE(2,"cake"), GELATO(3,"gelato");
private int id;
private String desc;
private Dessert(int id, String desc) {
this.id = id;
this.desc = desc;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public void getDeserByName(String name){
Dessert valueOf = Enum.valueOf(Dessert.class, name);
switch (valueOf) {
case FRUIT:
System.out.println(FRUIT);
break;
case CAKE:
System.out.println(CAKE);
break;
case GELATO:
System.out.println(GELATO);
break;
default:
break;
}
}
}
用法三:enumSet 和 enumMap
遍历和存储所有的enum对象
public static void main(String[] args) {
EnumSet<Dessert> allOf = EnumSet.allOf(Dessert.class);
for (Dessert dessert : allOf) {
System.out.println(dessert.getId() + "-----" + dessert.getDesc());
}
EnumMap<Dessert,Object> enumMap = new EnumMap<>(Dessert.class);
Set<Entry<Dessert,Object>> entrySet = enumMap.entrySet();
for (Entry<Dessert, Object> entry : entrySet) {
System.out.println(entry.getKey().getId() + "-----" + entry.getKey().getDesc());
}
}
用法四:enum
通过名字创建出对应的enum对象
public static void main(String[] args) {
for (Dessert dessertEnum : Dessert.values()) {
Dessert valueOf = Enum.valueOf(Dessert.class, dessertEnum.name());
System.out.println(valueOf.getId() + "-----" + valueOf.getDesc());
}
}