Java compareTo的泛型可比类型

Java compareTo的泛型可比类型,java,comparable,compareto,Java,Comparable,Compareto,我有一个名为getMember的方法,它可以返回任何可比较的对象、字符串、整数等。 我不知道使用什么作为类型参数,因此compareTo将起作用。下面的代码不起作用 Comparable<? extends Comparable<?>> m1 = column.getMember(o1); Comparable<? extends Comparable<?>> m2 = column.getMember(o2); int compareTo =

我有一个名为
getMember
的方法,它可以返回任何可比较的对象、字符串、整数等。 我不知道使用什么作为类型参数,因此
compareTo
将起作用。下面的代码不起作用

Comparable<? extends Comparable<?>> m1 = column.getMember(o1);
Comparable<? extends Comparable<?>> m2 = column.getMember(o2);

int compareTo = m1.compareTo(m2);
Comparable>m1=column.getMember(o1);
可比>m2=列。getMember(o2);
int compareTo=m1.compareTo(m2);

如果我不清楚,m1和m2将始终是相同的类型。比较没有类型参数的情况下效果很好,我只是想知道要放入什么

我想您需要的是一个。无论这段代码使用什么方法,都必须进行泛化。在缺少
getMember
方法的源代码的情况下,这是我的最佳选择

public <T extends Comparable<? super T>> void doSomethingTheOPWants() {
    ...
    T m1 = column.getMember(o1);
    T m2 = column.getMember(o2);
    int compareTo = m1.compareTo(m2);
}

public假设
getMember(o1)
返回一个字符串,而
getMember(o2)
返回一个整数(根据您的描述,这是可能的),您无法对它们进行比较是有意义的…@assylas,因为这不可能发生。它们将始终是相同的类型您可能知道这一点,但基于您声明的
m1
m2
类型,编译器不知道这一点。它只知道
m1
是某种类型的
Comparable
,而
m2
是某种类型的
Comparable
,可能与
m1
是同一类型,也可能不是同一类型。您应该使用参数化类型,而不是未知的
Comparable m1=column.getMember(o1)。但就我目前对
getMember
方法是如何声明的、它做了什么、它的类做了什么的知识(或缺乏知识)而言,我不能说得更多。