[問題] 關於 Wildcard 邊界問題

看板java作者 (putumaxally)時間9年前 (2015/09/28 02:29), 編輯推噓0(005)
留言5則, 2人參與, 最新討論串1/1
我在Oracle的官方網站的Tutorial學Java,目前看到Generic的部分, 對於後面題目的答案感到很困惑。 它的題目是 Write a generic method to find the maximal element in the range [begin, end) of a list. 我的答案是 static <T extends Comparable> T max( List<T> list, int begin, int end) { T max = list.get(begin); for (int i = begin + 1; i < end; i++) max = (list.get(i).compareTo(max) > 0) ? list.get(i) : max; return max; } 它的解答是 static <T extends Comparable<? super T>> T max( List<? extends T> list, int begin, int end) { T maxElem = list.get(begin); for (++begin; begin < end; ++begin) { if (list.get(begin).compareTo(maxElem) > 0) maxElem = list.get(begin); } return maxElem; } list 裡面應該只能放 T 跟它的子類別吧,那為什麼 Comparable 的類別參數 要給下界為T,我也完全不懂T的型態定義,如果我 list 裡面放的是T的子類別 那Comparable的下界為T不就不合理了嗎,其實我也不懂我的問題到底是什麼, Generic跟Wildcard把我搞的好亂...Generic是OO的概念吧,我是不是應該去找 本OO的書來看? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.230.125.79 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1443378540.A.738.html

09/28 10:02, , 1F
你先單純拿Comparable來用,再擴大到整個<T extends ...>
09/28 10:02, 1F

09/28 10:03, , 2F
List是T的子類別,但已經宣告Comparable<? super T>了
09/28 10:03, 2F

09/28 10:05, , 3F
Generic我是把它當語法而已,就有個interface型態而不是
09/28 10:05, 3F

09/28 10:06, , 4F
用Object然後再來轉型,OO我覺得看Design Pattern才有感
09/28 10:06, 4F

09/28 10:09, , 5F
http://bit.ly/1YJbYfT 這篇說的很清楚
09/28 10:09, 5F
文章代碼(AID): #1M23LiSu (java)
文章代碼(AID): #1M23LiSu (java)