java泛型程序设计——定义简单泛型类+泛型方法
生活随笔
收集整理的這篇文章主要介紹了
java泛型程序设计——定义简单泛型类+泛型方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【0】README
0.1) 本文描述+源代碼均 轉自 core java volume 1, 旨在理解 java泛型程序設計 的 定義泛型類+泛型方法的知識;
【1】一個泛型類: 就是具有一個或多個類型變量的類;
1.1)看個荔枝:
public class Pair<T> {private T first;private T second;public Pair() { first = null; second = null; }public Pair(T first, T second) { this.first = first; this.second = second; }public T getFirst() { return first; }public T getSecond() { return second; }public void setFirst(T newValue) { first = newValue; }public void setSecond(T newValue) { second = newValue; } }對以上代碼的分析(Analysis):
- A1) Pair類引入了一個類型變量T,用尖括號(<>) 括起來, 并放在類名的后面;
- A2)泛型類可以有多個類型變量, 如, 定義 Pair 類, 其中第一個和第二個域使用不同的類型: public class Pair
和方法:
String getFirst() String getSecond() void setFirst(String) void setSecond(String)- 1.2.2)一句話說完: 泛型類可以看做普通類的工廠;
1.3)看個荔枝:
【2】 泛型方法
2.1)如何定義一個帶類型參數的泛型方法:
class ArrayAlg {public static<T> T getMiddle(T... a){return a[a.length / 2];} }- 2.1.1)當調用一個泛型方法時, 在方法名前的尖括號中放入具體的類型:
- 2.1.2)其實, 方法調用中可以省略 類型參數, 編譯器有足夠的信息能偶推斷出所調用的方法;也就是說, 可以調用
2.2)在大多數情況下, 對于泛型方法的引用都沒有問題。 偶爾, 編譯器也會提示錯誤,看個荔枝:
double middle = ArrayAlg.getMiddle(3.14, 0, 1729);- 2.2.1)簡單地說, 編譯器將會自動打包參數為 1個 Double 和 2個Integer 對象,而后尋找這些類的共同超類型。
- 2.2.2)事實上, 找到2個這樣的超類型:Number 和 Comparable 接口, 其本身也是一個泛型類型。 在這種情況下, 可以采取的補救措施是 將 所有的參數寫為 double 值;
Hint)
- H1)如果想要知道 編譯器對一個泛型方法調用最終推斷出哪種類型, 某某人推薦一個方法:有目的地引入一個錯誤, 并研究所產生的錯誤消息。
- H2)例如,看一下調用 ArrayAlg.getMiddle(“hello”, 0, null), 這是肯定錯誤 的, 將會得到錯誤報告:
大致的意思是:可以將結果賦值給 Object、Serialiable 或 Comparable;
總結
以上是生活随笔為你收集整理的java泛型程序设计——定义简单泛型类+泛型方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么修改域名注册信息(怎么修改域名注册信
- 下一篇: java泛型程序设计——类型变量限定 +