Я пытаюсь создать класс, который можно либо сравнить с экземпляром того же класса, либо String
.Java, сопоставимый с экземпляром или строкой
Для примера рассмотрим следующее:
public class Record implements Comparable<Record> {
public String name;
public Record(String name) {
this.name = name;
}
public int compareTo(Record o) {
return name.compareTo(o.name);
}
}
Затем я кладу это в ArrayList
следующим образом:
ArrayList<Record> records = new ArrayList<Record>();
records.add(new Record("3"));
records.add(new Record("1"));
records.add(new Record("2"));
Если я затем отсортировать их, они сортируются правильно:
Collections.sort(records);
Однако я не хочу получать запись через двоичный поиск на основе строки. Например:
int index = Collections.binarySearch(records, "3");
Проблема заключается в том, что нет compareTo
метода, который принимает строку в качестве аргумента, и я не уверен, как это осуществить.
Я попытался сделать:
public class Record implements Comparable<Record>, Comparable<String> {
public String name;
public Record(String name) {
this.name = name;
}
public int compareTo(Record o) {
return name.compareTo(o.name);
}
public int compareTo(String o) {
return name.compareTo(o);
}
}
Но, конечно, вы не можете реализовать тот же интерфейс с различными аргументами более чем один раз.
Итак, я ищу способ сделать это. Я рассмотрел следующие предыдущие ответы, но не нашел того, который действительно достаточно прав. По крайней мере, если бы это было так, я не понял этого.
- compareTo and Strings using a Scanner
- Sorting a list of objects based on different data members in Java
- куча других, что у меня нет ссылки на сейчас ...
В общем, что я хочу сделать, это следующее:
public int compare(Record r, String s) {
return r.name.compareTo(s);
}
Насколько я могу судить, вы не можете сравнивать объекты разных типов без реализации своего рода общий интерфейс или суперкласс. У меня нет такого варианта с String
.
Может кто-нибудь, пожалуйста, покажите мне, как это сделать, если это возможно? Благодарю.
UPDATE Я понимаю, что я мог бы сделать следующее:
Collections.binarySearch(records, new Record("3"));
Но это не то, что я после. Благодарю.
В Java, вы всегда ** ** имеют общий суперкласс, 'Object' , –
@PatriciaShanahan Если я использую 'Comparable
Включено ли int int, что ** всегда ** список? – skuntsel