首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 方法參數與泛型參數的區別:泛型是類型參數化機制

     編輯:程式設計綜合問答

核心區別

泛型本質:類型參數化

泛型 = 「延遲綁定類型」。在定義類/方法時用佔位符 T 表示「任意類型」,使用時具體化為 String、Integer 等。

代碼對比

// 方法參數:處理具體值
void print(String s) { System.out.println(s); }
print("hello"); // 傳遞值

// 泛型參數:處理類型族
class Box {       // T 是類型參數
    private T value;
    public void set(T v) { value = v; } // 方法參數 v 類型為 T
    public T get() { return value; }
}

Box box = new Box<>(); // 傳遞類型參數 String
box.set("hello");              // 傳遞值參數 "hello"

泛型參數能省略嗎?

  • 聲明處不能省略:class Box 必須寫 T
  • 使用處可省略 (Java 7+ 鑽石語法):new Box<>() 編譯器推斷
  • 方法調用處可省略:box.set("hello") 推斷 T 為 String

為什麼需要泛型?

  1. 類型安全:編譯期檢查,避免 ClassCastException
  2. 代碼復用:一份邏輯服務多種類型
  3. 消除強轉:List list; String s = list.get(0); 無需 (String)

類型擦除補充

Java 泛型僅在編譯期存在,運行時 Box 和 Box 都是 Box。這是為兼容舊版本 JVM 設計的妥協。

總結

方法參數 = 值的佔位符 (運行時綁定值)。
泛型參數 = 類型的佔位符 (編譯期綁定類型,運行時擦除)。
兩者協同工作:void set(T value) 中 T 來自泛型參數,value 是方法參數。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
維度方法參數 (值參數)泛型參數 (類型參數)
作用對象運行時值編譯時類型
語法位置方法括號內 (int x)類/方法聲明處 class Box
傳遞機制調用時傳值實例化/調用時傳類型
可省略類型不可 (Java 10+ var 僅限局部變量)鑽石操作符 new Box<>() 可推斷
運行時保留值存在棧/堆類型擦除,運行時不可用