On 15/04/2019 21:54, fo...@univ-mlv.fr wrote:
m(List<Object> list ) {  ... }
  ...
  m(List.of(new Foo(), new Bar()));

Slightly incorrect sir :-)

This is effectively equivalent to the example I wrote earlier

List<Object> list = List.of(...)

The expected type will force the equality constraint and will drive inference home.

Otherwise it would not even work today in cases when you pass e.g. Integer and String to List.of, as their common supertype is something sharper than Object. This stuff used indeed to fail pre-Java 8, but I think we cured most of the issues. The remaining ones are when inference eagerly resolves variables w/o looking at the target, because a target is not there, as for 'var', or because the expression is in a receiver position, as in:

List<Object> list2 = List.of(new Foo(), new Bar()).subList(0, 42);

Now, this will fail, but I believe we're in the corner^2 territory?

Maurizio


Reply via email to