Hello, Again, thanks for the prompt response!
Well, I'm not really sure about the answer but, to my understanding, if this: List<Integer> x = emptyList(Number.class); compiles correctly (thus U inferred as Number, V inferred as Integer as expected), then why this List<Integer> x = (List<Integer>) emptyList(Number.class); does not compile ? (with explicit or var-typing) On the other hand, the following code var x = (Function<String,String>) x -> x; compile with no error, hence in this case, casting does help in type inference. I really feel that, although a bit "over complicated", there is something that I either really don't get, or something else :/ Regards, Justin Dekeyser On Mon, Jul 27, 2020 at 10:21 AM Florian Weimer <fwei...@redhat.com> wrote: > * Justin Dekeyser: > > > Nevertheless, the point was not really about list stuffs, and is not > > related to the lack of co/contra variance. > > > You may replace List with any other generic class Foo<T> and Integer > > and Number with any other class satisfying the same inheritance > > relations. > > Ahh, well, but why are such casts useful? The results will be wrong in > pretty much every case. Their correctness cannot be checked at run > time, either. > > Thanks, > Florian > >