JDK 1.5(代號 Tiger)引入六大語言級新特性,顯著提升開發效率與代碼健壯性。本文逐一解析並附代碼示例。
集合宣告時指定元素類型,編譯器自動檢查,避免運行期 ClassCastException,並免除強制轉型。
// JDK 1.4
List list = new ArrayList();
list.add("Alice");
String name = (String) list.get(0); // 需強轉
// JDK 1.5
List list = new ArrayList<>();
list.add("Alice");
// list.add(123); // 編譯報錯
String name = list.get(0); // 無需強轉
方法簽名攜帶類型資訊,呼叫端傳入錯誤類型集合將編譯失敗,極大降低隱性 Bug。
// 傳統寫法
for (Iterator i = c.iterator(); i.hasNext(); ) {
Employee e = (Employee) i.next();
System.out.println(e.getName());
}
// 增強 for
for (Object o : c) {
System.out.println(((Employee) o).getName());
}
將 : 讀作「in」,語意清晰,減少迭代器誤用風險。
// 過去
Integer age = new Integer(30);
Integer ageAfterTen = new Integer(age.intValue() + 10);
// 現在
Integer age = 30; // 自動裝箱
Integer ageAfterTen = age + 10; // 自動拆箱運算後再裝箱
注意:拆箱 null 會拋 NullPointerException,需謹慎處理。
特性:編譯期類型安全、可放入集合、可擴展方法、自帶命名空間、列印值可讀。
// 簡單枚舉
enum Season { WINTER, SPRING, SUMMER, FALL }
// 豐富枚舉
public enum Coin {
PENNY(1), NICKEL(5), DIME(10), QUARTER(25);
private final int value;
Coin(int value) { this.value = value; }
public int value() { return value; }
}
// 傳統
import org.yyy.pkg.Increment;
salary + Increment.INCREMENT * salary;
// 靜態導入
import static org.yyy.pkg.Increment.INCREMENT;
salary + INCREMENT * salary; // 直接使用常量名
以註解替代樣板代碼,配合工具實現代碼生成、框架配置等。
// 過去:大量樣板代碼
public interface EmployeeI extends Remote {
String getName() throws RemoteException;
String getLocation() throws RemoteException;
}
public class EmployeeImpl implements EmployeeI { ... }
// 現在:註解驅動
public class Employee {
@Remote public String getName() { ... }
@Remote public String getLocation() { ... }
}
這六大特性共同構成 JDK 1.5 的現代化基因:泛型守護類型安全、增強 for 提升可讀性、自動裝箱消除樣板轉型、枚舉賦予語義豐富性、靜態導入簡化常量引用、註解開啟宣告式編程時代。深入掌握它們,是編寫健壯、可維護 Java 代碼的關鍵。