Dynamic 为什么我需要在提交给执行人的结案时使用as Callable?
为什么下面的groovy代码会通过Dynamic 为什么我需要在提交给执行人的结案时使用as Callable?,dynamic,concurrency,groovy,Dynamic,Concurrency,Groovy,为什么下面的groovy代码会通过 Executor executor = Executors.newFixedThreadPool(1) assert executor.submit({"some value"}).get() == null assert executor.submit({"some value"} as Callable).get() == "some value" 当{}instanceof Closure实现GroovyCallable extenses Callab
Executor executor = Executors.newFixedThreadPool(1)
assert executor.submit({"some value"}).get() == null
assert executor.submit({"some value"} as Callable).get() == "some value"
当{}instanceof Closure实现GroovyCallable extenses Callable时
as关键字提供了什么黑魔法?好吧,groovy编译器的一个特性是在
Closure
之前选择Runnable
接口Callable
,以避免方法重载调用不明确
请看一下讨论和讨论
要了解问题的一些观点,您可以查看类似的Java代码,这些代码将无法编译:
class MyClosure implements Runnable, Callable<String> {
@Override public String call() throws Exception {
return "some value";
}
@Override public void run() {
}
}
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.submit(new MyClosure());
类MyClosure实现可运行、可调用的{
@重写公共字符串调用()引发异常{
返回“某个值”;
}
@重写公共无效运行(){
}
}
ExecutorService ExecutorService=Executors.newSingleThreadExecutor();
executorService.submit(新的MyClosure());