簡體   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