Java可与泛型类型进行比较
尝试比较表单中的泛型类型时
Class<T> implements Comparable<T> {
public int compareTo(T other){
this.T < other
}
}
不适用于我,但在使用时
Class<T extends Comparable<T>>{
T.compareTo(other.T)
}
确实有效。我无法用第一个例子来判断为什么不能直接比较t
# 1 楼答案
我希望这两个Exmaple能对你的问题有所帮助:
在第一种情况下,对于
Foo
,您对类型T
一无所知,所以在compareTo()
方法中做不了多少事情然而,在
Boo
中,需要T
来实现Comparable<? super T>
(如果您不知道wildcards是什么,只需简单地考虑一下Comparable<T>
),所以您可以调用t.compareTo(anotherT)
。更多关于bounded type parameters编辑:(威尔德解释)
考虑以下代码:
现在打电话
sportCar1.compareTo(SportCar2)
是完全合法的。然而,如果没有通配符,Bar<SportCar>
是一个cpomfile错误为什么?因为
SportCar
没有实现Comparable<SportCar>
。您需要T
来实现Comparable<T>
,在本例中T
是SportCar
但是
SportCar
实现了Comparable<Car>
,Car
是SportCar
的一个超类型。所以你想说“T可以与T或T的任何超类型相比较”(比如在这个例子中SportCar
可以与任何Car
相比较)这就是通配符的用途(还有很多其他用途)。希望这有帮助
# 2 楼答案
在第一个例子中:
你是说
Foo
对象是可比较的。在第二个例子中:你是说无论
T
是什么,都是可比的然后,在代码主体中,尝试比较
T
类型的东西。在第一种情况下,你不能保证它们是可比较的,在第二种情况下,你可以