【发布时间】:2011-04-22 18:39:08
【问题描述】:
我想比较一组可比对象。最简单的方法似乎如下(细节未显示):
public class ArrayComparable implements Comparable<ArrayComparable>{
ArrayList<Comparable<?>> list = new ArrayList<Comparable<?>>();
@Override
public int compareTo(ArrayComparable ac) {
Iterator<Comparable<?>> itr = ac.list.iterator();
for(Comparable<?> l : list) {
Comparable<?> itrNext = itr.next();
if(itrNext.getClass() == l.getClass()) {
if(itrNext.compareTo(l)) {
//something
} else {
//other stuff
}
} else {
//some other thing
}
}
}
当然,这里的问题是compareTo 中的itrNext.compareTo(l) 将无法工作,给出错误:The method compareTo(capture#6-of ?) in the type Comparable<capture#6-of ?> is not applicable for the arguments (Comparable<capture#7-of ?>)
我明白为什么(就方法而言,我可能会将苹果与橙子进行比较)。另一方面,我知道我不是在比较之前检查事物的类别。
那么有什么方法可以让我完成这项工作吗?不要担心比较任何可比数组的合理性,因为我有充分的理由要这样做。
编辑-那么我为什么要做这样的事情。假设我想要一个可比较的数组,我不在乎每个索引中包含什么,只要类型对应,并且可以进行比较。然后我可以在这些数组之间进行一般的字典比较。这样我就不必为(int,int) 和(int, string) 和(string, double, string) 或任何你需要的东西写一个可比的。我只写了一个,只要确保类型匹配(并且可以),我就可以开始了。
【问题讨论】:
-
“另一方面,我知道我不是,因为我在比较之前检查了事物的类别。”所以?仅仅因为两个对象属于同一类并不意味着您可以比较它们。
标签: java arrays generics compareto