[英]Scala's type equivalent in Java
人们在Scala中写道:
type Par[A] = ExecutorService => Future[A]
他们指的是这样的Par
:
def run[A](s: ExecutorService)(a: Par[A]): Future[A] = a(s)
Java中相当于type
(Scala)的内容是什么?
这称为类型别名 ,在Java中不存在。 虽然您可以使用类似以下内容来近似:
abstract class Par<A> extends F<ExecutorService, Future<A>>
编辑:我同意迪迪埃。 这是一条毁灭之路。
这是一个使用ExecutorService
并返回使用Par<A>
并返回Future<A>
的函数的咖喱函数。
Java中的Curried函数可以由返回对象的方法来模拟。 因此,假设我们有一个interface
:
@FunctionalInterface
interface Par<A> {
Future<A> apply(ExecutorService ex);
}
我们不能将Function<ExecutorService, Future<A>>
别名为interface Par
,但是您可以扩展该interface
:
@FunctionalInterface
interface Par<A> extends Function<ExecutorService, Future<A>> {
}
没什么大不了的-Java不支持类型别名,并且有几种解决方法,有些比其他方法更丑陋。
我们需要一个Object
是发生在一个闭合ExecutorService
和返回Function<Par<A>, Future<A>>
<A> Function<Par<A>, Future<A>> withExecutor(ExecutorService s) {
return a -> a.apply(s);
}
因此,使用ExecutorService
实例调用withExecutor
将为您提供Function<Par<A>, Future<A>>
,现在要执行Par
并获得未来,我们将调用该函数:
final ExecutorService s = ...
final Function<Par<A>, Future<A>> run = withExecutor(s);
final Par<A> par = ...
final Future<A> f = run.apply(par);
注意,这里假设使用Java 8。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.