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