QuentinC
QuentinC

Reputation: 14862

Java fails to automatically infer generic parameter

I have this method defined:

public static <E extends Comparable<E>> NavigableSet<E> navigableSet (List<E> l)

When I write:

NavigableSet<Integer> set = Sets.navigableSet(new ArrayList<Integer>());

Everything is fine, but if I write this instead:

NavigableSet<Integer> set = Sets.navigableSet(new ArrayList<>());

Java is unable to automatically infer the Integer type. I get the following error:

error: no suitable method found for navigableSet(ArrayList<Object>)
NavigableSet<Integer> set = Sets.navigableSet(new ArrayList<>());
                                ^
method Sets.<E#1>navigableSet(List<E#1>) is not applicable
  (inferred type does not conform to equality constraint(s)
    inferred: E#2
    equality constraints(s): E#3)

Why? What is preventing Java from making a correct inference?

My version of Java is:

openjdk 11.0.5 2019-10-15
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.5+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.5+10, mixed mode)

Upvotes: 3

Views: 117

Answers (0)

Related Questions