刚刚完成了Java 7的java.util.Collections类的实现,看到了一些我不理解的东西.在max函数签名中,为什么T受限于Object?
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll) {
Iterator<? extends T> i = coll.iterator();
T candidate = i.next();
while (i.hasNext()) {
T next = i.next();
if (next.compareTo(candidate) > 0)
candidate = next;
}
return candidate;
}
Run Code Online (Sandbox Code Playgroud)
max 如果省略Object绑定似乎工作正常.
public static <T extends Comparable<? super T>> T max(Collection<? extends T> coll) {
Iterator<? extends T> i = coll.iterator();
T candidate = i.next();
while (i.hasNext()) …Run Code Online (Sandbox Code Playgroud) 你是如何做这项工作的:
public class Frankenstein<T extends IHuman, IMonster>{
}
Run Code Online (Sandbox Code Playgroud)
没有制作
public interface Weirdo extends Ihuman, IMonster{
}
Run Code Online (Sandbox Code Playgroud)
编辑
为什么这不起作用?
public <T> void mapThis(
Class<? extends MyClass<T>> key, Class<? extends T & IDisposable> value) {
}
Run Code Online (Sandbox Code Playgroud)
我将编译器消息标记Class<? extends T & IDisposable>为错误.
我的答案
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
Run Code Online (Sandbox Code Playgroud)
从下面引用的答案
所以我的问题是
选项1:如果T extends Object & Comparable<? super T>替换为,会有什么不同吗T extends Comparable<? super T>?不extends Object隐含?
选项2:如果Comparable<? super T>替换为它会有什么不同Comparable<T>吗?如果是这样?
Eclipse代码完成List<? extends Comparable<? super Comparable<? super T>>> list;在Ctrl + 1上创建局部变量,max(list, 1, 10); …