作者putumaxally (putumaxally)
看板java
标题[问题] 关於 Wildcard 边界问题
时间Mon Sep 28 02:28:57 2015
我在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://webptt.com/cn.aspx?n=bbs/java/M.1443378540.A.738.html
1F:→ jtorngl: 你先单纯拿Comparable来用,再扩大到整个<T extends ...> 09/28 10:02
2F:→ jtorngl: List是T的子类别,但已经宣告Comparable<? super T>了 09/28 10:03
3F:→ jtorngl: Generic我是把它当语法而已,就有个interface型态而不是 09/28 10:05
4F:→ jtorngl: 用Object然後再来转型,OO我觉得看Design Pattern才有感 09/28 10:06