CompletionStage - thenX / thenXAsync: одна и та же сигнатура метода, одна компиляция, а другая нет - PullRequest
2 голосов
/ 24 апреля 2019

Используя CqlSession , меня привели к нам несколько CompletionStage .

Сначала я использовал thenApply , прежде чем перейти к thenApplyAsync , оба предоставляют одинаковую сигнатуру, но когда я использую thenApplyAsync , моя программа больше не компилируется и выдает ошибка ниже.

Ошибка: (80, 22) перегружено значение метода thenApplyAsync с альтернативами: (x $ 1: java.util.function.Function [_>: com.datastax.oss.driver.api.core.cql.AsyncResultSet, _ <: data.model.stored.Company], x $ 2: java.util. concurrent.Executor) java.util.concurrent.CompletionStage [data.model.stored.Company] (x $ 1: java.util.function.Function [_>: com.datastax.oss.driver.api.core.cql.AsyncResultSet, _ <: data.model.stored.Company]) java.util.concurrent.CompletionStage [data.model.stored.Company] не может быть применено к (com.datastax.oss.driver.api.core.cql.AsyncResultSet => data.model.stored.Company) .thenApplyAsync [StoredCompany] ((_: ​​AsyncResultSet) => компания)

После рассмотрения проблемы оба метода должны иметь одинаковое конечное поведение (за исключением того, что асинхронный один имеет дело с функцией в другом потоке, в данном случае - сессией).

Проблема одинакова на каждом месте, где я сменил thenX на thenXAsync, вот пример:

session
  .executeAsync(statement)
//.thenApplyAsync[Boolean](...) >> this one cause the error
  .thenApply[Boolean]({ set: AsyncResultSet =>
    optionRow(set) match {
      case Some(row) => row.getBoolean(CqlConst.AppliedColumnName)
      case None => throw new DataNotFoundException(id.toString)
    }
  })

Ожидаемый результат не будет иметь разницы между этими двумя (за исключением чуть менее эффективного выполнения для асинхронной версии)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...