一、定义常量的方式
接口
public interface IConstants {
String MON = "Mon";
String TUE = "Tue";
String WED = "Wed";
String THU = "Thu";
String FRI = "Fri";
String SAT = "Sat";
String SUN = "Sun";
}
类
public class Constants {
public static String MON = "Mon";
public static String TUE = "Tue";
public static String WED = "Wed";
public static String THU = "Thu";
public static String FRI = "Fri";
public static String SAT = "Sat";
public static String SUN = "Sun";
}
枚举
public enum WeekdayTest {
MON,TUE,WED,THU,FRI,SAT,SUN
}
注意:官方文档说明,安卓开发应避免使用Enum(枚举类),因为相比于静态常量Enum会花费两倍以上的内存。
二、语法
创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类,enum继承该类,故enum不能再继承其他的类(Java单继承))。枚举类型符合通用模式 Class Enum
WeekdayTest实际上调用了7次 Enum(String name, int ordinal):
三、switch中使用Enum
public class Test {
public static void main(String[] args) {
for (WeekdayTest e : WeekdayTest.values()) {
System.out.println(e.toString());
}
System.out.println("----------------我是分隔线------------------");
WeekdayTest test = WeekdayTest.TUE;
switch (test) {
case MON:
System.out.println("今天是星期一");
break;
case TUE:
System.out.println("今天是星期二");
break;
// ... ...
default:
System.out.println(test);
break;
}
}
}
MON
TUE
WED
THU
FRI
SAT
SUN
----------------我是分隔线------------------
今天是星期二
/**
* 枚举测试类
*/
public enum EnumTest {
MON(1), TUE(2), WED(3), THU(4), FRI(5), SAT(6) { //括号中的参数要和构造函数统一
@Override
public boolean isRest() {
return true;
}
},
SUN(0) {
@Override
public boolean isRest() {
return true;
}
};
private int value; //成员变量或属性
private EnumTest(int value) { //构造方法
this.value = value;
}
public int getValue() {
return value;
}
public boolean isRest() {
return false;
}
}
public class Test {
public static void main(String[] args) {
System.out.println("EnumTest.FRI 的 value = " + EnumTest.FRI.getValue());
}
}
枚举的构造函数不能为public和protected,所以不能显示的调用构造函数来定义枚举实例变量,Enum也可重写方法。
输出结果:
五、Enum实现已有的接口 public interface Behaviour {
void print();
String getInfo();
}
public enum Weekday implements Behaviour {
MON("星期一", 1), TUE("星期二", 2), WED("星期三", 3), THU("星期四", 4), FRI("星期五",5),SAT("星期六",6),SUN("星期天",7);
// 成员变量
private String name;
private int index;
// 构造方法
private Weekday(String name, int index) {
this.name = name;
this.index = index;
}
// 接口中的方法
@Override
public String getInfo() {
return this.name;
}
// 接口中的方法
@Override
public void print() {
System.out.println(this.index + ":" + this.name);
}
}
六、枚举集合
java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。
public class Test {
public static void main(String[] args) {
// EnumSet的使用
EnumSet weekSet = EnumSet.allOf(WeekdayTest.class); //或者:WeekdayTest[] weekSet = WeekdayTest.values();
for (WeekdayTest day : weekSet) {
System.out.println(day);
}
// EnumMap的使用 ,和HashMap差不多,只不过key值为Enum类型
EnumMap weekMap = new EnumMap(WeekdayTest.class);
weekMap.put(WeekdayTest.MON, "星期一");
weekMap.put(WeekdayTest.TUE, "星期二");
// ... ...
for (Iterator> iter = weekMap.entrySet().iterator(); iter.hasNext();) { //遍历
Entry entry = iter.next();
System.out.println(entry.getKey().name() + ":" + entry.getValue());
}
}
}
转自:http://blog.csdn.net/a78270528/article/details/46946369 http://www.cnblogs.com/happyPawpaw/archive/2013/04/09/3009553.html