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
方法是如何声明的、它做了什么、它的类做了什么的知识(或缺乏知识)而言,我不能说得更多。