拜托,我想知道写作之间的区别
public class Something<T extends Comparable<T>> {// }
Run Code Online (Sandbox Code Playgroud)
和
public class Something<T extends Comparable> {// }
Run Code Online (Sandbox Code Playgroud)
以及它将如何影响代码
区别在于,在第一种情况下,类型参数T必须与其自身进行比较,而在第二种情况下,类型参数T可以与任何内容进行比较。一般来说,当一个类C具有可比性时,Comparable<C>无论如何都会声明它要实现。尽管如此,这里有一个例子,说明第一个不起作用但第二个可以:
class C1<T extends Comparable<T>> { // first case
}
class C2<T extends Comparable> { // second case
}
class A { // some super class
}
class B extends A implements Comparable<A> { // comparable to super class
@Override
public int compareTo(A o) {
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
现在:
new C1<B>(); // error
new C2<B>(); // works
Run Code Online (Sandbox Code Playgroud)
一般来说,您不应该使用第二种方法;尽可能远离原始类型。另请注意,第二种方法的更好选择是
public class Something<T extends Comparable<? super T>> { /*...*/ }
Run Code Online (Sandbox Code Playgroud)
使用它也C1将允许new C1<B>()上面的行编译。