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

在 Eclipse 3.1 中體驗 J2SE 5.0 新特性(三):泛型實戰——型別安全與多參數避坑指南

     編輯:J2SE

3.3 泛型在程式中的使用

3.3.1 建立泛型類別物件

建立泛型物件時需提供具體類別取代類型參數 T(J2SE 5.0 不支援基本型別作為類型參數):

// 整數列表
GenList<Integer> integerList = new GenList<Integer>();
// 字串列表
GenList<String> strList = new GenList<String>();
// 錯誤:基本型別不可作為類型參數
GenList<int> nList = new GenList<int>(); // 編譯錯誤

3.3.2 泛型解決型別安全問題

使用泛型實現的列表具備編譯期型別檢查,破壞型別安全的程式碼會在編譯時報錯。Eclipse 3.1 將錯誤標記顯示於編輯器中,滑鼠懸停即可查看提示。

型別安全錯誤提示

3.3.3 多參數泛型的二義性錯誤

GenMap 宣告兩個類型參數 T、V,建立物件時需提供兩個具體類別:

GenMap<Integer, String> gm = new GenMap<Integer, String>();
GenMap<String, String> gm2 = new GenMap<String, String>();

雖 T、V 看似不同,但使用時可能被替換為同一類型,導致方法簽名衝突:

public class GenMap<T, V> {
    // 編譯錯誤:二義性錯誤
    public void set(T t) {}
    public void set(V v) {}
}

正確做法是使用不同方法名稱:

public class GenMap<T, V> {
    public void setKey(T t) {}
    public void setValue(V v) {}
}

二義性錯誤示意

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