我有一个小问题,并想知道如何解决它。我有一个泛型类Tuple<A,B>
,现在我想根据A和B对它们的元组进行排序。它应该是这样的:
未排序:
(1,5) (2,8) (6,8) (1,4) (2,4)
排序:
(1,4) (1,5) (2,4) (2,8) (6,8)
出于这个原因,我想到在Tuple类中实现一个通用的比较方法(public int compareTo(Tuple<A, B> other)
)。唯一的问题是你可以为类参数化的所有对象(例如A = Integer,B = String)也必须实现compareTo方法,以便整个过程能够工作。
有没有办法确保Tuple可以容纳的所有对象实现Comparable接口?
或者有没有其他建议如何解决这个问题?
谢谢
答案 0 :(得分:7)
如果您将该类声明为
public class Tuple<A extends Comparable<? super A>,
B extends Comparable<? super B>> { ...
然后确保A和B都具有自我可比性。然后,您可以在课程中的任何A或B类型的对象上调用compareTo()
。
答案 1 :(得分:5)
您可以使用递归类型边界(另请参阅Effective Java的第27项)来指定元组的组件扩展Comparable,如下所示:
public class Tuple<A extends Comparable<? super A>, B extends Comparable<? super A>> implements Comparable<Tuple<A, B>> {
A valueA;
B valueB;
@Override
public int compareTo(Tuple<A, B> tuple) {
// Implement comparison logic
return 0;
}
}
这允许您为元组的组件指定不同的类型(元组&lt; Integer,String&gt;)。
答案 2 :(得分:1)
这应该可以解决问题。您指定的任何类都必须扩展Comparable。
public class Tuple<? extends Comparable> {
}