Почему компилятор жалуется на создание отсортированной коллекции с несопоставимыми элементами, когда реализован интерфейс компаратора данных? - PullRequest
1 голос
/ 06 мая 2020

Я хочу создать список отсортированных элементов, поэтому я решил использовать TreeSet Вот мой код. и он жалуется Construction of sorted collection with non-comparable elements Интересно, почему компилятор жалуется, а затем вы можете видеть, что класс Info реализует Comparator, но он все еще жалуется, я понимаю, что он ожидается как конструктор, но я не понимаю, почему?

TreeSet<Info> items = new TreeSet<>()
@AutoValue
public abstract class Info implements Comparator<Info> {

  public abstract long millisecond();


  public abstract String uri();


  public static Info create(
          long millisecond,  String uri) {
      return new AutoValue_Info(millisecond, uri);
  }

  @Override
  public int compare(Info t1, Info t2) {
      return ....;
  }
}

1 Ответ

1 голос
/ 06 мая 2020

Вы должны реализовать Comparable, а не Comparator, чтобы это работало.

Java имеет два общих параметра для сопоставления объектов. Если объект может быть изменен, реализация интерфейса Comparable работает в большинстве стандартных библиотечных классов. Для объектов, которые нельзя / не следует изменять, можно создать Comparator. Затем объект компаратора передается в качестве дополнительной информации, например, для TreeSet существует конструктор, который принимает объект компаратора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...