首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 5 新語言特性深度體驗:泛型、協變返回、可變參數、增強For與枚舉實戰精要

     編輯:Java 相關知識

為 BEA Java IDE 開發 JDK 5 編譯器過程中,團隊深度使用新特性,總結實戰精要與避坑指南 (非入門教學)。

增強 For 循環

  • Init 表達式只算一次:for (int n : computeNumbers()) 避免重複計算與變數洩露
  • 局限:需索引/迭代器/判斷首項時仍需傳統循環

可變參數

  • 語法:void log(String msg, Object... args) → 內部為陣列
  • 禁忌:破壞類型系統 (如 log(String, Exception, Object...) 混淆參數順序)
  • 例外:PrintStream.printf(String format, Object... args) 格式字串提供類型資訊

協變返回類型

子類覆寫可回傳更具體類型,替換三種反模式:

  1. 直接暴露欄位 ZooImpl._animal
  2. 呼叫端向下轉型 ((AnimalImpl)zoo.getAnimal())
  3. 專用方法 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;

通配符 PECS 原則

  • List:Producer (讀取 Number,不可寫入)
  • List:Consumer (寫入 Integer,讀取只能 Object)
  • API 設計盡量用通配符擴大適用性:void removeNegatives(List 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,慎用避免命名空間汙染。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved