确保对象实现Comparable

时间:2010-07-02 14:57:09

标签: 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)

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

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

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

谢谢

3 个答案:

答案 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> {
}