When I use java 7 to compile a code using PriorityQueue with Comparator, compiler sends error:
cannot infer type arguments for Comparator;
Comparator> colorComparator = new Comparator<>() {
^
reason: cannot use '<>' with anonymous inner classes
Why this, and how can I compile me code:
Comparator> colorComparator = new Comparator>() {
@Override
public int compare(Map.Entry o1, Map.Entry o2) {
return o1.getKey().intValue() - o2.getKey().intValue();
}
};
PriorityQueue> minHeap = new PriorityQueue<>(colorComparator);
解决方案
It is a limitation in java-7 the <> operator is not supported for anonymous classes
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
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> colorComparator = new Comparator>()