Diamonds: cyclic inference error
Aleksey Shipilev
aleksey.shipilev at oracle.com
Mon Oct 15 07:21:41 PDT 2012
Hi guys, and Maurizio specifically :)
This is the test which fails to compile with current lambda/lambda:
------------- 8< -------------------------------------------------------
public class NoiseSampleTest {
@Test
public void testL() {
Map<String, Map<String, Counter>> map =
new ComputeTreeMap<>(
(s) -> new ComputeTreeMap<>(
(x) -> new Counter()
)
);
Assert.assertEquals(1, map.get("foo").get("bar").inc());
Assert.assertEquals(2, map.get("foo").get("bar").inc());
}
public static class ComputeTreeMap<K, V> extends TreeMap<K,V> {
public ComputeTreeMap(Mapper<K, V> map) {
// do nothing
}
@Override
public V get(Object key) {
throw new UnsupportedOperationException();
}
}
public static class Counter {
private int count = 0;
public int inc() {
return ++count;
}
}
}
-------------- 8< ----------------------------------------------------
javac says:
com/oracle/lambda/NoiseSampleTest.java:[16,16] error: cannot infer type
arguments for ComputeTreeMap<>
[ERROR] cyclic inference - cannot infer target type for given
lambda/method reference expression
...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?
-Aleksey.
More information about the lambda-dev
mailing list