今天分享使用Enum這個應該大家都會用的型態(應該從C就有了吧!?),今天恰好工作上要把常用的靜態code常做常數使用,當然Enum是很好的選擇啦,java也提供加強版的EnumSet,把enum當作Collection來用,沒有疑問的也支援泛型,當然也支援個人有幾個EnumSet的方法挺好用的,以下分享今日程式。
import java.util.EnumSet;
import java.util.Iterator;
public class EnumTest {
public enum Code{
UR, DR, DW, DO, FR, FW, FO, CR, CW, CO, IO, IW, II, IT, IC, WD, WC, WP //工作上用到的常數
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
for(Code c : Code.values()){ //將每個值讀出
System.out.println(c+":Index:"+c.ordinal());// ordinal應該也可以稱做index
}
EnumSet<Code> cs= EnumSet.range(Code.IO, Code.IC); //range方法可以取某一段的值
EnumSet<Code> cs2=EnumSet.complementOf(EnumSet.range(Code.DR, Code.WP));//complementof方法是取complement
//刪除掉某些值後的set,要傳入EnumSet
EnumSet<Code> cs3=EnumSet.of(Code.FR, Code.CR, Code.DR); //of方法可以指定那些值要存到set裡
Iterator<Code> i=cs.iterator(); //建立Iterator物件,好用來取值
Iterator<Code> k=cs2.iterator();
Iterator<Code> j=cs3.iterator();
System.out.println("只取出IO到IC這段的值");
while(i.hasNext()){
System.out.println(i.next());
}
System.out.println("取出除了DR到WP以外的值");
while(k.hasNext()){
System.out.println(k.next());//當然只有UR囉!
}
System.out.println("特別挑出特定值");
while(j.hasNext()){
System.out.println(j.next());
}
}
}
Output:
UR:Index:0
DR:Index:1
DW:Index:2
DO:Index:3
FR:Index:4
FW:Index:5
FO:Index:6
CR:Index:7
CW:Index:8
CO:Index:9
IO:Index:10
IW:Index:11
II:Index:12
IT:Index:13
IC:Index:14
WD:Index:15
WC:Index:16
WP:Index:17
只取出IO到IC這段的值
IO
IW
II
IT
IC
取出除了DR到WP以外的值
UR
特別挑出特定值
DR
FR
CR