Java 7 -> Cannot infer Type with Comparator

天涯浪子 提交于 2021-02-17 06:12:39

问题


When I use java 7 to compile a code using PriorityQueue with Comparator, compiler sends error:

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

Why this, and how can I compile me code:

    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:


It is a limitation in java-7 the <> operator is not supported for anonymous classes

Class Instance Creation Expressions

It is a compile-time error if a class instance creation expression declares an anonymous class using the "<>" form for the class's type arguments.

But from jdk-9 <> operators is supported for anonymous classes

What’s New for the Java Language in JDK 9

Allow the diamond with anonymous classes if the argument type of the inferred type is denotable.

So to resolve this issue either upgrade java 7 to java 9 or just define the generic parameters like second approach in your example

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


来源:https://stackoverflow.com/questions/58043817/java-7-cannot-infer-type-with-comparator

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!