【发布时间】:2015-10-12 20:41:36
【问题描述】:
我正在学习 Oracle java 教程。我目前正在学习泛型,我对课程结束时的问题 8 感到困惑,下面提供了解决方案。
具体来说,我不明白让T 扩展Object 和Comparable<? super T> 背后的基本原理。 T 简单地扩展Comparable<? super T> 还不够,还有T 扩展Object 有什么好处?
问题:
编写一个通用方法来查找列表范围 [begin, end) 中的最大元素。
答案:
import java.util.*;
public final class Algorithm {
public static <T extends Object & Comparable<? super T>>
T max(List<? extends T> list, int begin, int end) {
T maxElem = list.get(begin);
for (++begin; begin < end; ++begin)
if (maxElem.compareTo(list.get(begin)) < 0)
maxElem = list.get(begin);
return maxElem;
}
}
【问题讨论】:
-
这篇文章被标记为重复的问题肯定是相关的,但它并不完全是重复的。另一个问题是为什么
Collections.max有extends Object,但是在这个问题的链接教程问题/答案中,答案(向后兼容性)不适用。 -
@rgettman 同意。我最初链接到这个问题现在是 and 到 stackoverflow.com/questions/18411527/… 的“重复”,但正是出于这个原因删除了第一个链接:向后兼容性不适用于此处。另一个问题的答案很好地解释了类型擦除,因此关闭可能仍然是合理的。