Diamonds: cyclic inference error
Aleksey Shipilev
aleksey.shipilev at oracle.com
Mon Oct 15 09:15:07 PDT 2012
On 10/15/2012 06:50 PM, Maurizio Cimadamore wrote:
>> ...and if I write out the explicit type arguments within the diamond,
>> the test compiles well. Is this a spec-ed behavior, or just a bug?
> This is the spec'd behavior, yes. You are passing an implicit lambda to
> a method where the target type contains inference variables (because of
> diamond). Which means javac doesn't know what the lambda parameter types
> should be inferred to. Javac would try to delay type-checking of the
> lambda expression as much as possible (to see if other inference
> constraints can be derived from remaining argument expression) - but in
> this case there's no additional arguments. Either you specify the type
> of the diamond, or you specify the explicit lambda parameter type.
For the record, this one works:
Map<String, Map<String, Counter>> map =
new ComputeTreeMap<>(
(String s) -> new ComputeTreeMap<>(
(String x) -> new Counter()
)
);
Thanks,
Aleksey.
More information about the lambda-dev
mailing list