本文展示 J2SE 1.5 (Tiger) 三大核心新特性——泛型、增強 for 循環、枚舉類型——的綜合應用範例,含編譯執行指令與輸出結果。
package tigers;
import java.util.*;
public class GenericTest {
public static void main(String[] args) {
// 泛型宣告:僅允許 String 元素
List<String> list = new ArrayList<>();
list.add("aaaaaaaaaaaa");
list.add("bbbbbbbbbbbbb");
list.add("cccccccccccccc");
list.add("ddddddddddddd");
list.add("eeeeeeeeeeeeeeeee");
// 增強 for 循環:無需強制轉型,編譯期保證型別安全
for (String s : list) {
System.out.println(s);
}
}
}
C:\forms> javac -d c:\forms\web-inf\classes c:\forms\src\GenericTest.java
C:\forms> java -classpath c:\forms\web-inf\classes tigers.GenericTest
aaaaaaaaaaaa
bbbbbbbbbbbbb
cccccccccccccc
ddddddddddddd
eeeeeeeeeeeeeeeee
package tigers;
import java.util.EnumMap;
enum Simple1 { A, B, C, D; }
public class SimpleEnum {
public static void main(String[] args) {
// 1. 直接列印枚舉常量
System.out.println(Simple1.A); // 輸出: A
// 2. values() 遍歷所有常量
for (Simple1 s : Simple1.values()) {
System.out.print(s); // 輸出: ABCD
}
System.out.println();
// 3. switch 語句支援枚舉 (case 中直接用常量名,無需類名首碼)
Simple1 s2 = Simple1.D;
switch (s2) {
case A: System.out.print("A"); break;
case B: System.out.print("B"); break;
case C: System.out.print("C"); break;
default: System.out.print(s2); // D
}
System.out.println();
// 4. EnumMap:鍵為枚舉類型的高效 Map 實作
EnumMap<Simple1, String> map = new EnumMap<>(Simple1.class);
String str = "something";
int i = 0;
for (Simple1 s3 : Simple1.values()) {
map.put(s3, str += (i++ + " "));
}
System.out.println(map); // {A=something0 , B=something0 1 , C=something0 1 2 , D=something0 1 2 3 }
// 5. 遍歷 EnumMap
for (Simple1 s4 : Simple1.values()) {
System.out.println(s4 + " = " + map.get(s4));
}
}
}
C:\tiger> javac -d c:\tiger\cls c:\tiger\src\SimpleEnum.java
C:\tiger> java -classpath c:\tiger\cls tigers.SimpleEnum
A
ABCD
D
{A=something0 , B=something0 1 , C=something0 1 2 , D=something0 1 2 3 }
A = something0
B = something0 1
C = something0 1 2
D = something0 1 2 3
| 特性 | 核心優勢 | 注意事項 |
|---|---|---|
| 泛型 | 編譯期型別安全、消除強制轉型、程式碼復用 | 型別擦除:運行時泛型資訊丟失,無法 new T()、T[]、instanceof T |
| 增強 for | 語法簡潔、支援陣列/Collection/Iterable、無索引越界風險 | 無法獲取索引、無法在遍歷中結構性修改集合 (需用 Iterator.remove) |
| 枚舉 | 型別安全、單例保證、可攜帶行為/資料、支援 switch/EnumMap/EnumSet | 無法繼承其他類 (隱性繼承 Enum)、建構子只能 private、常量隱性 static final |