参数表达式的类型与形式参数类型不兼容,您可能希望研究通配符类型,例如 _ <:Any'。(SLS 3.2.10)



我正在使用下面的代码来检查一些东西,我在".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)
}

当结果为Boolean时,将类型arg推断为map似乎有问题。

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输出的类型与输入的类型不同,则会出现错误。

最新更新