169 похожих чатов

Хелло еверибади, У меня тут проблема на тему covariance contrvariance -

тема в которой разобраться не могу

Имеется вот такая штука (запускаю в scalasheet)
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.{Promise, Future, Await}
import scala.concurrent.duration._

import java.util.concurrent.CompletableFuture
import java.util.function.Supplier

val supp = new Supplier[Int] {
override def get(): Int = {
Thread.sleep(500)
20
}
}
val cf = CompletableFuture.supplyAsync(supp)


def javaCFtoScalaF[A](cf: CompletableFuture[A]): Future[A] = {
val promise = Promise[A]
cf.handle {
(a, ex: Throwable) => {
Option(a).
map(r => promise.success(r)).
getOrElse(promise.failure(ex))
}
}

promise.future
}

val sf = javaCFtoScalaF[Int](cf)

sf.isCompleted
sf.value

Await.result(sf, 1.second)

Выдаёт
Error:(19, 6) no type parameters for method handle: (x$1: java.util.function.BiFunction[_ >: A, Throwable, _ <: U])java.util.concurrent.CompletableFuture[U] exist so that it can be applied to arguments (java.util.function.BiFunction[A,Throwable,scala.concurrent.Promise[A]])
--- because ---
argument expression's type is not compatible with formal parameter type;
found : java.util.function.BiFunction[A,Throwable,scala.concurrent.Promise[A]]
required: java.util.function.BiFunction[_ >: A, Throwable, _ <: ?U]
Note: A <: Any, but Java-defined trait BiFunction is invariant in type T.
You may wish to investigate a wildcard type such as `_ <: Any`. (SLS 3.2.10)
cf.handle {

Error:(20, 24) type mismatch;
found : java.util.function.BiFunction[A,Throwable,scala.concurrent.Promise[A]]
required: java.util.function.BiFunction[_ >: A, Throwable, _ <: U]
(a, ex: Throwable) => {

Кто-нибудь поможет?

2 ответов

8 просмотров

очень больно глазкам читать разъехавшийся код с мобилки. Попробуйте скасти, есть в описании канала

Какая версия компилятора у тебя? В скасти последняя по дефолту

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
DS
8
Карта сайта