Java 确保对象实现可比较的

Java 确保对象实现可比较的,java,generics,compare,Java,Generics,Compare,我有一个小问题,想知道如何解决它。我有一个通用类Tuple,现在我想根据a和B对它们的Tuple进行排序。它应该是这样的: 未分类: (1,5) (2,8) (6,8) (1,4) (2,4) (1,5) (2,8) (6,8) (1,4) (2,4) 分类: (1,4) (1,5) (2,4) (2,8) (6,8) (1,4) (1,5) (2,4) (2,8) (6,8) 出于这个原因,我考虑在Tuple类中实现一个通用的比较方法(public int compareTo(Tuple ot

我有一个小问题,想知道如何解决它。我有一个通用类
Tuple
,现在我想根据a和B对它们的Tuple进行排序。它应该是这样的:

未分类:

(1,5) (2,8) (6,8) (1,4) (2,4) (1,5) (2,8) (6,8) (1,4) (2,4) 分类:

(1,4) (1,5) (2,4) (2,8) (6,8) (1,4) (1,5) (2,4) (2,8) (6,8) 出于这个原因,我考虑在Tuple类中实现一个通用的比较方法(
public int compareTo(Tuple other)
)。唯一的问题是,您可以为其参数化类的所有对象(例如,A=Integer,B=String)也必须实现compareTo方法,才能使整个过程正常工作

有没有办法确保元组中的所有对象都可以实现可比较的接口

或者对于如何解决这个问题还有其他建议吗


谢谢

这应该就够了。您指定的任何类都必须扩展

public class Tuple<? extends Comparable> {
}

公共类元组如果将类声明为

public class Tuple<A extends Comparable<? super A>,
                   B extends Comparable<? super B>> { ...

public class Tuple您可以使用递归类型边界(另请参见的第27项)来指定Tuple的组件扩展为可比较的,如下所示:

 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;
    }
}

public-class-Tuple我意识到你写这篇文章时没有看到Tuple的原始泛型声明,所以我不能责怪你遗漏了A和B参数。但即使如此,它也会引起警告,因为您没有参数化Comparable。我更喜欢
a extends Comparable您不应该使用
a extends Comparable
。。。这不适用于实现原始
Comparable
,以及其他功能的较旧类。mmyers的签名带有
A,谢谢。为了避免误导,我修改了我的答案,并对mmyers的版本进行了更新。当我尝试实现比较器时,我得到一个错误:“运算符”