Я хочу сравнить массив сопоставимых объектов. Простейший способ выглядит следующим образом (подробности не показаны):
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)
или для всего, что вам нужно. Я просто пишу один, и пока я удостоверяюсь, что типы совпадают (и я могу), я в порядке.