繁体   English   中英

Java中的Scala类型等效

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM