Java中的枚举:
enum Number{
ONE, TWO,THREE,FOUR;
}
语法的使用很简单,直接用enum定义了一个Number类,定义了ONE, TWO,THREE,FOUR这样四个常量,enum是基础了java.lang.Enum,我查了一下jdk的api文档:
Enum是一个abstract class类, 所以Number不可在继承其他类,不然就造成了多继承,查阅了很多文件说java编译的.class文件是把所有的属性都定义成了静态常量
public static final enum com.test12.Number ONE;
public static final enum com.test12.Number TWO;
public static final enum com.test12.Number THREE;
public static final enum com.test12.Number FOUR;
以这种形式存在,于是我想在做android开发的时候大量的使用static可能造成oom,可能需要慎用;
public class test12 {
public static void main(String[] args) {
Number number = Number.ONE;
//Number中的常量会如同数组一样按0,1这样保存下去,直接用.values()放法便可取得其下标
for(Number n:number.values()){
System.out.println(n);
}
switch (number) {
case ONE:
number = Number.FOUR;
System.out.println(number);
break;
case TWO:
number = Number.THREE;
break;
case THREE:
number = Number.TWO;
break;
case FOUR:
System.out.println("ok");
break;
}
}
}
也可以自定义方法
enum Colors {
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
// 成员变量
private String name;
private int index;
// 构造方法,必须有,且为私有
private Colors(String name, int index) {
this.name = name;
this.index = index;
}
// 覆盖方法
@Override
public String toString() {
return this.index + "_" + this.name;
}
}
public class test12{
public static void main(String[] args) {
System.out.println(Colors.RED.toString());
}
}
枚举中提供了很多方法,如上图中的的compareTo,getDeclaringClass() ,ordinal() ,toString() ,valueOf等;
存在两种枚举集合:java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型:
EnumSet<Colors> Colors_s = EnumSet.allOf(Colors.class);
for (Colors Colors_set : Colors_s) {
System.out.println(Colors_set);
}
// EnumMap的使用
EnumMap<Colors, String> weekMap = new EnumMap(Colors.class);
weekMap.put(Colors.BLANK, "蓝");
weekMap.put(Colors.RED, "红");
// ... ...
for (Iterator<Entry<Colors, String>> iter = weekMap.entrySet().iterator(); iter.hasNext();) {
Entry<Colors, String> entry = iter.next();
System.out.println(entry.getKey().name() + ":" + entry.getValue());
}
可能在java中减省了重复申明静态常量的繁琐过程,使开发规范和简单,可能在android中好像很少用,我想在java中还是很有必要的,更多深入了了解还需要学习