使用通用对象的已知方法
Use known methods of generic objects
我有一个 class 接收 2 个未知的通用对象 x 和 y。如果它们具有可比性,我必须将它们与对象进行比较。我发现我可以使用 instanceof
检查对象是否实现了 Comparable
接口,但我不知道如何使用 .compareTo
方法,尽管我知道对象实现了他们-
我想做的基本上就是 x 和 y 是通用对象:
public void someMethod(E x, E y) {
if (x instanceof Comparable && y instanceof Comparable) {
if(x.compareTo(y) < 0){ //The method compareTo(E) is undefined for the type E
//do stuff
}
}
}
有人能指出我正确的方向吗?
检查后您可以(并且应该)安全地转换对象以根据需要使用它们。
if (x instanceof Comparable && y instanceof Comparable) {
Comparable c1 = (Comparable) x;
Comparable c2 = (Comparable) y;
if(c1.compareTo(c2) < 0){
//do stuff
}
}
您需要指定泛型类型绑定。现在 E
可以是任何 Object
类型,但看起来您想将其限制为实现 Comparable
的任何类型,它看起来像:
public <T extends Comparable<? super T>> void someMethod(T x, T y) {
if (x.compareTo(y) < 0) {
//do stuff
}
}
建议转换的替代答案是正确的,但不是一个好的解决方案:如果您知道 'x' 和 'y' 实现 Comparable
,您应该这样限制它们。
你应该像这样声明方法
public <E extends Comparable<E>> void someMethod(E x, E y)
所以在你的方法中你可以确保使用 compareTo 方法。
我有一个 class 接收 2 个未知的通用对象 x 和 y。如果它们具有可比性,我必须将它们与对象进行比较。我发现我可以使用 instanceof
检查对象是否实现了 Comparable
接口,但我不知道如何使用 .compareTo
方法,尽管我知道对象实现了他们-
我想做的基本上就是 x 和 y 是通用对象:
public void someMethod(E x, E y) {
if (x instanceof Comparable && y instanceof Comparable) {
if(x.compareTo(y) < 0){ //The method compareTo(E) is undefined for the type E
//do stuff
}
}
}
有人能指出我正确的方向吗?
检查后您可以(并且应该)安全地转换对象以根据需要使用它们。
if (x instanceof Comparable && y instanceof Comparable) {
Comparable c1 = (Comparable) x;
Comparable c2 = (Comparable) y;
if(c1.compareTo(c2) < 0){
//do stuff
}
}
您需要指定泛型类型绑定。现在 E
可以是任何 Object
类型,但看起来您想将其限制为实现 Comparable
的任何类型,它看起来像:
public <T extends Comparable<? super T>> void someMethod(T x, T y) {
if (x.compareTo(y) < 0) {
//do stuff
}
}
建议转换的替代答案是正确的,但不是一个好的解决方案:如果您知道 'x' 和 'y' 实现 Comparable
,您应该这样限制它们。
你应该像这样声明方法
public <E extends Comparable<E>> void someMethod(E x, E y)
所以在你的方法中你可以确保使用 compareTo 方法。