【发布时间】:2013-08-23 20:43:39
【问题描述】:
当我尝试解决练习时from generics tutorial Q&A我的答案略有不同
我的答案
public static <T extends Comparable<? super T>>
T max(List<? extends T> list, int begin, int end) //Option1
public static <T extends Comparable<T>>
T max(List<? extends T> list, int begin, int end) //Option2
来自下面引用的答案
所以我的问题是
选项1:如果
T extends Object & Comparable<? super T>被替换为T extends Comparable<? super T>会有什么不同。extends Object不是隐含的吗?Option2 : 如果
Comparable<? super T>被替换为Comparable<T>会有什么不同吗?如果是怎么办?Eclipse 代码完成在 Ctrl+1
max(list, 1, 10);上创建局部变量List<? extends Comparable<? super Comparable<? super T>>> list;,这有点长。如何定义扩展Comparable<? super T>的类(层次结构),创建列表并将实例添加到列表并调用以下方法?基本上我想知道在将类实例A or B添加到class B extends A的列表中之后如何调用max()
编写一个泛型方法来查找范围内的最大元素 [开始,结束)列表。
答案:
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;
}
}
【问题讨论】:
-
我不太明白你的第三个问题。你能详细说明一下吗?
-
eclipse 为哪个方法调用创建了该局部变量?我不明白它为什么会这样做。至少嵌套的 Comparable 泛型类型在这里确实不合理。
-
我想我已经为你的第三个问题添加了答案。您可以在那里查看
Parent、Child代码。我想这就是你想要的。 -
@RohitJain 当您输入
max(list, 1, 10);并执行 ctrl1 并选择 'create local variable list' 时,它将被 eclipse 插入。是的,你已经回答了第三次谢谢:)。当 eclipse 创建那个冗长的声明时,我有点困惑