Насколько я понимаю, вы пытаетесь реализовать структуру данных Pair
, которую вы хотели бы сохранить в списке, а затем отсортировать, используя Collections.sort
на основе ключей Pair
Проблема в вашем коде в том, что вы используете Collections.sort
, который принимает List<T> list
, где T расширяется Comparable<? super T>
.В основном это означает Collections.sort
Принимает T, который расширяет сам себя.
т.е. в вашем случае Вы должны расширить Comparable
с Pair
вместо OrderedPair<String,String>
.Вы можете дополнительно изменить интерфейс на класс Abstract и реализовать compareTo
в самом классе Pair
.Вот код с небольшими изменениями в вашем коде.
abstract class Pair<K, V> implements Comparable<Pair> {
abstract K getKey();
abstract V getValue();
@Override
public int compareTo(Pair o) {
return this.getKey().toString().compareTo(o.getKey().toString());
}
}
class OrderedPair<K, V> extends Pair<K, V> {
private K k;
private V v;
public OrderedPair(K k, V v) {
this.k = k;
this.v = v;
}
@Override
public K getKey() {
return k;
}
@Override
public V getValue() {
return v;
}
}
class Operation {
public static void main(String[] args) {
List<Pair<String, String>> list = new ArrayList() {{
add(new OrderedPair("BCA", "29"));
add(new OrderedPair("CAB", "31"));
add(new OrderedPair("ABC", "30"));
}};
Collections.sort(list); // showing compile time error
}
}
Попробуйте это:)