為 BEA Java IDE 開發 JDK 5 編譯器過程中,團隊深度使用新特性,總結實戰精要與避坑指南 (非入門教學)。
for (int n : computeNumbers()) 避免重複計算與變數洩露void log(String msg, Object... args) → 內部為陣列log(String, Exception, Object...) 混淆參數順序)PrintStream.printf(String format, Object... args) 格式字串提供類型資訊子類覆寫可回傳更具體類型,替換三種反模式:
ZooImpl._animal((AnimalImpl)zoo.getAnimal())ZooImpl._getAnimal()協變返回:AnimalImpl getAnimal() → zoo.getAnimal().implMethod(),整潔、安全、可維護。
static List singletonList(T o) // 推論 T
List ls = singletonList("hi"); // T=String
static List emptyList() // 無參推論:從賦值目標
List li = emptyList(); // T=Integer
// 條件運算子/方法參數中推論失敗 → 顯式指定
li = flag ? Collections.emptyList() : null;
List extends Number>:Producer (讀取 Number,不可寫入)List super Integer>:Consumer (寫入 Integer,讀取只能 Object)void removeNegatives(List extends Number> list)class ArrayExample {
private final Class clazz;
ArrayExample(Class clazz) { this.clazz = clazz; }
@SuppressWarnings("unchecked")
T[] getArray(int size) { return (T[]) Array.newInstance(clazz, size); }
}
// new ArrayExample(String.class).getArray(10)
instanceof List 編譯錯誤enum Color extends Enum,提供 values()/valueOf()/ordinal()、實作介面、掛載屬性/方法、作為 Switch 判斷 (編譯器優化為 tableswitch)。
import static java.lang.System.*; → 直接用 out/err,慎用避免命名空間汙染。