| 語法 | 含義 | 適用場景 | 典型案例 |
<?> | 未知類型 | 只讀操作 | List<?> |
<? extends E> | E 或 E 的子類(上界) | 生產者(取出) | addAll(Collection<? extends E>) |
<? super E> | E 或 E 的父類(下界) | 消費者(存入) | Comparator<? super E> |
記憶口訣:PECS —— Producer Extends, Consumer Super。
實戰代碼示例
基礎使用
List list = new ArrayList<>();
list.add("abc");
// list.add(123); // 編譯報錯
for (String s : list) { System.out.println(s); } // 無需強轉
Comparable 與 Comparator
public class Person implements Comparable {
private String name; private int age;
@Override public int compareTo(Person o) {
int t = this.age - o.age;
return t == 0 ? this.name.compareTo(o.name) : t;
}
}
public class ComparatorByName implements Comparator {
@Override public int compare(Person o1, Person o2) {
int t = o1.getName().compareTo(o2.getName());
return t == 0 ? o1.getAge() - o2.getAge() : t;
}
}
// 使用
TreeSet ts = new TreeSet<>(new ComparatorByName());
類與方法級泛型
public class Tool {
private QQ q;
public QQ getObject() { return q; }
public void setObject(QQ q) { this.q = q; }
// 方法級泛型
public void show(W str) { System.out.println(str); }
public void print(QQ qq) { System.out.println(qq); } // 僅能調用 Object 方法
// 靜態方法必須自行聲明泛型
public static void method(Y obj) { System.out.println(obj); }
}
關鍵限制
- 不能實例化類型參數:
new T() ❌
- 不能創建泛型數組:
new T[10] ❌
- 靜態上下文不能使用類泛型
- 異常類不能是泛型
- 上一篇文章: Java 集合核心:hashCode() 與 equals() 契約深度解析與最佳實踐
- 下一篇文章: Hibernate Criteria 查詢與註解映射全攻略:從基礎條件到動態查詢、投影、分頁實戰
Copyright ©
程式碼之家 All Rights Reserved