确保对象实现Comparable

eve*_*ean 5 java generics compare

我有一个小问题,并想知道如何解决它.我有一个泛型类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)

出于这个原因,我想到public int compareTo(Tuple<A, B> other)在Tuple类中实现一个通用的compare方法().唯一的问题是你可以为类参数化的所有对象(例如A = Integer,B = String)也必须实现compareTo方法,以便整个过程能够工作.

有没有办法确保元组可以容纳的所有对象实现Comparable接口?

或者有没有其他建议如何解决这个问题?

谢谢

Mic*_*ers 7

如果您将该类声明为

public class Tuple<A extends Comparable<? super A>,
                   B extends Comparable<? super B>> { ...
Run Code Online (Sandbox Code Playgroud)

然后确保A和B都具有自我可比性.然后,您可以调用类compareTo()中包含的任何类型为A或B的对象.


Lyl*_*yle 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这允许您为元组的组件指定不同的类型(Tuple <Integer,String>).