Java 7 -> Невозможно определить тип с помощью компаратора - PullRequest
0 голосов
/ 21 сентября 2019

Когда я использую Java 7 для компиляции кода с использованием PriorityQueue с Comparator, компилятор отправляет сообщение об ошибке:

 cannot infer type arguments for Comparator<T>;
    Comparator<Map.Entry<Double, PureColor>> colorComparator  = new Comparator<>() {
                                                                              ^
  reason: cannot use '<>' with anonymous inner classes

Почему это так и как мне скомпилировать код:

    Comparator<Map.Entry<Double, PureColor>> colorComparator  = new Comparator<Map.Entry<Double, PureColor>>() {

      @Override
      public int compare(Map.Entry<Double, PureColor> o1, Map.Entry<Double, PureColor> o2) {
        return o1.getKey().intValue() - o2.getKey().intValue();
      }
    };

    PriorityQueue<Map.Entry<Double, PureColor>> minHeap = new PriorityQueue<>(colorComparator);

1 Ответ

1 голос
/ 21 сентября 2019

Это ограничение в java-7, оператор <> не поддерживается для анонимных классов

Выражения создания экземпляра класса

ЭтоОшибка во время компиляции, если выражение создания экземпляра класса объявляет анонимный класс, используя форму "<>" для аргументов типа класса.

Но из jdk-9 <> операторы поддерживаются для анонимных классов

Что нового для языка Java в JDK 9

Разрешить ромб с анонимными классами, если тип аргумента выведенного типа является denotable.

Таким образом, чтобы решить эту проблему, либо обновите Java 7 до Java 9, либо просто определите общие параметры, такие как второй подход в вашем примере

Comparator<Map.Entry<Double, PureColor>> colorComparator  = new Comparator<Map.Entry<Double, PureColor>>()
...