java 8 lambda不明确的可运行和回调
“方法调用不明确。ExecutorService中的submit(可调用)和ExecutorService中的submit(可运行)都匹配。”java 8 lambda不明确的可运行和回调,java,java-8,Java,Java 8,“方法调用不明确。ExecutorService中的submit(可调用)和ExecutorService中的submit(可运行)都匹配。” 如何修复它?我知道我可以使用匿名类,但我想使用函数。在不明确的情况下,显式提供类型: Executors.newFixedThreadPool(3).submit(() -> {doSmth();}); Executors.newFixedThreadPool(3).submit(() -> 1); //Callable Executors
如何修复它?我知道我可以使用匿名类,但我想使用函数。在不明确的情况下,显式提供类型:
Executors.newFixedThreadPool(3).submit(() -> {doSmth();});
Executors.newFixedThreadPool(3).submit(() -> 1); //Callable
Executors.newFixedThreadPool(3).submit(() -> {doSmth();}); //Runnable
在我的IDE(IntelliJ)上工作,没有问题。此外,如果
doSmth
是一个实例方法,则可以将其重写为Executors.newFixedThreadPool(3).submit(this::doSmth)代码>什么IDE/编译器?你确定你的lambda有块体吗?({doSmth();}
而不是doSmth()
)可能是一个bug。检查这是否是您的问题:也可以在Eclipse上工作,没有编译错误。我认为这与链接副本不同,因为这是一个JDK bug,这是一个“解决歧义”问题……不过,这不应该是必要的。OP有一个块体,因此要使其成为可调用的块体,它需要显式返回一个值。Executors.newFixedThreadPool(3)。submit(()->1)代码>对于可调用的对象足够了。
Runnable runnable = () -> {doSmth();}
submit(runnable);
//or:
submit((Runnable) () -> {doSmth();});