Java泛型方法

來源:互聯網
上載者:User

package PairTestMyCode.copy;<br />import java.util.*;<br />public class PairTest2<br />{<br /> public static void main(String[] args)<br /> {<br /> GregorianCalendar[] birthdays =<br /> {<br /> new GregorianCalendar(1906, Calendar.DECEMBER, 9), // G. Hopper<br /> new GregorianCalendar(1815, Calendar.DECEMBER, 10), // A. Lovelace<br /> new GregorianCalendar(1903, Calendar.DECEMBER, 3), // J. von Neumann<br /> new GregorianCalendar(1910, Calendar.JUNE, 22), // K. Zuse<br /> };<br /> Pair<GregorianCalendar> mm = ArrayAlg.minmax(birthdays);<br /> System.out.println("min = " + mm.getFirst().getTime());<br /> System.out.println("max = " + mm.getSecond().getTime());<br /> }<br />}<br />class ArrayAlg<br />{<br /> /**<br /> Gets the minimum and maximum of an array of objects of type T.<br /> @param a an array of objects of type T<br /> @return a pair with the min and max value, or null if a is<br /> null or empty<br /> */<br /> public static <T extends Comparable> Pair<T> minmax(T[] a)<br /> {<br /> if (a == null || a.length == 0) return null;<br /> T min = a[0];<br /> T max = a[0];<br /> for (int i = 1; i < a.length; i++)<br /> {<br /> if (min.compareTo(a[i]) > 0) min = a[i];<br /> if (max.compareTo(a[i]) < 0) max = a[i];<br /> }<br /> return new Pair<T>(min, max);<br /> }<br />}<br />class Pair<T><br />{<br />private T first;<br />private T second;</p><p>public Pair()<br />{<br />first = null;<br />second = null;<br />}<br />public Pair(T first, T second)<br />{<br />this.first = first;<br />this.second = second;<br />}<br />public T getFirst()<br />{<br />return first;<br />}<br />public T getSecond()<br />{<br />return second;<br />}<br />public void setFirst(T newValue)<br />{<br />first = newValue;<br />}<br />public void setSecond(T newValue)<br />{<br />second = newValue;<br />}</p><p>}<br />

 

 其中第30行代碼是public static <T extends Comparable> Pair<T> minmax(T[] a)<br /> {<br /> if (a == null || a.length == 0) return null;<br /> T min = a[0];<br /> T max = a[0];<br /> for (int i = 1; i < a.length; i++)<br /> {<br /> if (min.compareTo(a[i]) > 0) min = a[i];<br /> if (max.compareTo(a[i]) < 0) max = a[i];<br /> }<br /> return new Pair<T>(min, max);<br /> }

 

看了半天都看不懂public static <T extends Comparable> Pair<T> minmax(T[] a)

這段代碼來源於Java2核心技術 第7版  第1卷 P665頁,雖然這部書是經典圖書,但是這個地方寫得真得不好。

看了很長時間都沒有看懂,去新華書店翻開了 李興華的《Java開發實戰經典》和李剛《瘋狂Java講義》兩本書的

相關部分後,終於弄懂了。看來有時候一段複雜的技術代碼剛剛接觸的時候,無法弄懂不一定是自己笨,而是很可能是

作者的原因。

泛型方法的文法

[存取權限修飾符] [static] [final] <型別參數列表> 傳回值類型 方法名([形式參數列表])

 

[]表示為可選的。

 

 public static <T extends Comparable> Pair<T> minmax(T[] a)

<T extends Comparable> 是指 型別參數列表,安裝李興華一書的原話來說T是個未知的類型,由調用它(指泛型方法本身)的具體參數來決定的類型。【方法中傳入或返回的泛型型別由調用方法時所設定的參數類型所決定。李興華一書的原句】

可用extends  和 super 關鍵字分別來 指定  上限 和下限 類型。

 

Pair<T> 是傳回值。

 

minmax 參數名

 

T[] a 形式參數列表

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.