В Scala люди пишут:Scala в Java
type Par[A] = ExecutorService => Future[A]
и они имеют в виду Par
так:
def run[A](s: ExecutorService)(a: Par[A]): Future[A] = a(s)
, Что эквивалентно type
(Scala) в Java?
В Scala люди пишут:Scala в Java
type Par[A] = ExecutorService => Future[A]
и они имеют в виду Par
так:
def run[A](s: ExecutorService)(a: Par[A]): Future[A] = a(s)
, Что эквивалентно type
(Scala) в Java?
Это нарекание типа и нет на Java. Хотя вы можете приблизиться к этому примерно так:
abstract class Par<A> extends F<ExecutorService, Future<A>>
Редактировать: Я согласен с Дидье. Это путь к гибели.
Это далека от приближения. Это совершенно бесполезно. – rightfold
Это кэрри функция, которая принимает ExecutorService
и возвращает функцию, которая принимает Par<A>
и возвращает Future<A>
.
Curried функции в Java могут эмулироваться методами, возвращающими объекты. Итак, предположим, что мы имеем 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);
}
Так вызывая withExecutor
с ExecutorService
например, даст вам 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.
Их нет. Вы должны повторить полное объявление типа в java, не можете сделать псевдоним (вы можете сделать подтип, большую часть времени он не работает хорошо). –