问题
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