enhanced type-inference
Peter Levart
peter.levart at gmail.com
Sun Jan 27 04:10:30 PST 2013
Very nice, indeed. Congratulations!
We now hardly need casts if APIs are written correctly.
One idea that might make the remaining needed casts more concise, but I
don't know how it would play with this new inference scheme, is a kind
of "diamond cast". For example, to disambiguate two overloaded methods
with interchangeable SAM types used for arguments:
interface F<P, R> { R apply(P p); }
interface G<P, R> { R apply(P p); }
class C {
void m(F<String, Integer> f);
void m(G<String, Integer> g);
}
C c = ...;
c.m(s -> s.length()); // ambiguous
c.m((G<String, Integer>) s -> s.length()); // ok, but long
c.m((F<>) s -> s.length()); // concise
Regards, Peter
On 01/25/2013 06:49 PM, Maurizio Cimadamore wrote:
> Dear lambdackers,
> I've just pushed a patch that enables a more general inference support
> for nested generic method calls/stuck expressions. This scheme has been
> available for a while in lambda-repo (when using the hidden flag
> -XDuseGraphInference), but we have now decided it's time to flip the
> switch and make it the default when using JDK 8. In the past few weeks
> I've been hunting down as many bugs in the new inference scheme as
> possible, in order to provide a smooth transition from the old world to
> the new one. I hope the transition is indeed smooth - but, given the
> nature of the change, I also expect bugs to pop up here and there, so
> please, keep throwing the kitchen sink at javac and report your
> experience back to us; without your valuable feedback and dedication we
> would never have gotten thus far.
>
> Example of things that now work:
>
> Stream<Integer> si = ...
> List<Integer> l1 = si.into(new ArrayList<>()); //not really - too
> late for that ;-)
> List<Integer> l2 = si.collect(toList());
> List<Integer> l3 = si.collect(toCollection(ArrayList::new));
>
> Thanks
> Maurizio
>
>
More information about the lambda-dev
mailing list