Тип выражения аргумента не совместим с формальным типом параметра may Вы можете wi sh, чтобы исследовать подстановочный тип, такой как `_ <: Any`. (SLS 3.2.10) - PullRequest
1 голос
/ 19 февраля 2020

Я использую приведенный ниже код для проверки чего-либо, и я получаю две ошибки в строке ".map (f => f.getBlacklistedAccounts.contains (accountID))", не знаю, что это значит, может кто-нибудь помочь мне с этим? Спасибо.

Первый из них

argument expression's type is not compatible with formal parameter type;
no type parameters for method map: (x$1: java.util.function.Function[_ >: my.util.BlacklistRule, _ <: U])java.util.Optional[U] exist so that it can be applied to arguments (java.util.function.Function[my.util.BlacklistRule,Boolean])
found   : java.util.function.Function[my.util.BlacklistRule,Boolean]
[scalac-2.12]  required: java.util.function.Function[_ >: my.util.BlacklistRule, _ <: ?U]
[scalac-2.12] Note: my.util.BlacklistRule <: Any, but Java-defined trait Function is invariant in type T.
[scalac-2.12] You may wish to investigate a wildcard type such as `_ <: Any`. (SLS 3.2.10)
[scalac-2.12]       .map(f => f.getBlacklistedAccounts.contains(accountID))
[scalac-2.12]        ^

Второй

 error: type mismatch;
[scalac-2.12]  found   : java.util.function.Function[my.util.BlacklistRule,Boolean]
[scalac-2.12]  required: java.util.function.Function[_ >: my.util.BlacklistRule, _ <: U]
[scalac-2.12]       .map(f => f.getBlacklistedAccounts.contains(accountID))

мой код

def isAccountBlacklistForAction(ruleBlacklist: RuleBlacklist, accountID: String, rule: String): Boolean ={
    ruleBlacklist.getRules
      .stream
      .filter(a => a.getRuleName.equals(rule))
      .findFirst()
      .map(f => f.getBlacklistedAccounts.contains(accountID))
      .orElse(true)
  }

1 Ответ

3 голосов
/ 19 февраля 2020

Кажется, возникла проблема с выводом типа arg на map, когда результат равен Boolean.

object Test extends App {
  val vs = java.util.List.of(1, 2, 3)

  println {
    vs.stream()
      .filter(_ > 2)
      .findFirst()
      //.map(i => i + 1)         // OK
      //.orElse(42)
      //.map(i => i > 0)         // OK scala 2.13
      .map[Boolean](i => i > 0)  // required for scala 2.12
      .orElse(true)
  }
}

. исправлено в 2.13.1 . Проблема указывает на то, что ошибка устранена, если вывод A => B отличается от ввода.

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