javac compilation error when passing method reference to method accepting interface.
Vicente-Arturo Romero-Zaldivar
vicente.romero at oracle.com
Mon Nov 17 19:11:38 UTC 2014
Hi Tomasz,
Thanks for the follow-up.
Vicente
On 11/17/2014 01:00 AM, Tomasz Kowalczewski wrote:
> Thanks for looking at the issue. I have downloaded latest langtools
> from jdk8u repo and it indeed fixes the problem.
>
>
> On Thu, Nov 6, 2014 at 6:55 PM, Vicente-Arturo Romero-Zaldivar
> <vicente.romero at oracle.com <mailto:vicente.romero at oracle.com>> wrote:
>
> Hi again,
>
> By [1] I meant: https://bugs.openjdk.java.net/browse/JDK-8044546 :)
>
> Thanks,
> Vicente
>
>
>
> On 11/06/2014 09:30 AM, Vicente-Arturo Romero-Zaldivar wrote:
>
> Hi Tomasz,
>
> The bug you are referring to has already been fixed, please
> see [1]. The bits are not in any public release yet but you
> can build one from the development repos:
>
> for 8: http://hg.openjdk.java.net/jdk8u/jdk8u-dev/langtools
> for 9: http://hg.openjdk.java.net/jdk9/dev/langtools/
>
> Thanks,
> Vicente
>
> [1]
>
> On 11/03/2014 03:15 AM, Tomasz Kowalczewski wrote:
>
> Hi,
>
> please excuse my ignorance if this is a known bug, was
> discussed here or is plain silly.
>
> I have a curious problem when calling a method with lambda
> or method reference as an argument. This happens on
> several versions of Java 8 including latest (u25). Test
> case is:
>
> package test;
>
> import java.util.LinkedHashMap;
> import java.util.Map;
> import java.util.concurrent.Callable;
>
> public class CompilationProblem {
>
> public void shouldCompile() {
> toMap(() -> new LinkedHashMap()); // Compilation error
> toMap(LinkedHashMap::new); // Compilation error
> }
>
> public <K, V> Map<K, V> toMap(Func0<? extends Map<K,
> V>> mapFactory) {
> return null;
> }
>
> interface Func0<R> extends Callable<R> {
>
> public R call();
> }
> }
>
> The errors are:
>
> Error:(10, 17) java: method toMap in class
> pl.codewise.voluum.server.db.CompilationProblem cannot be
> applied to given types;
> required:
> pl.codewise.voluum.server.db.CompilationProblem.Func0<?
> extends java.util.Map<K,V>>
> found: ()->new Li[...]Map()
> reason: cannot infer type-variable(s) K,V
> (argument mismatch; bad return type in lambda expression
> java.util.LinkedHashMap cannot be converted to ?
> extends java.util.Map<K,V>)
>
> Error:(11, 22) java: incompatible types: no instance(s) of
> type variable(s) K,V exist so that
> java.util.LinkedHashMap<K,V> conforms to ? extends
> java.util.Map<K,V>
>
> This test case compiles if Func0 does not extend Callable.
> How does Callable influence type inference here? What does
> it change?
>
> --
> Regards,
> Tomasz Kowalczewski
>
>
>
>
>
>
> --
> Tomasz Kowalczewski
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20141117/721f1ad7/attachment-0001.html>
More information about the compiler-dev
mailing list