作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
拜托,我想知道写作之间的区别
public class Something<T extends Comparable<T>> {// }
和
public class Something<T extends Comparable> {// }
这将如何影响代码
最佳答案
不同之处在于,在第一种情况下,类型参数 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;
}
}
现在:
new C1<B>(); // error
new C2<B>(); // works
一般来说,你不应该使用第二种方法;尽可能远离原始类型。另请注意,第二种方法的更好选择是
public class Something<T extends Comparable<? super T>> { /*...*/ }
与 C1
一起使用将允许 new C1<B>()
上面的行也可以编译。
关于java - java泛型的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18944582/
我是一名优秀的程序员,十分优秀!