【问题标题】:Trait Subtractable issue after upgrading from Scala 2.11.11 to Scala 2.12.3从 Scala 2.11.11 升级到 Scala 2.12.3 后的 Trait Subtractable 问题
【发布时间】:2017-08-18 10:22:12
【问题描述】:

我迁移了我的 Scala Play!从 Scala 2.11.11 到 Scala 2.12.3 的应用程序

从那时起,我在编译我的应用程序时收到以下错误:

type arguments [?,Equals] do not conform to trait Subtractable's type parameter bounds [A,+Repr <: scala.collection.generic.Subtractable[A,Repr]]
[error]       for (req <- request.req.getRequestList) {
[error]                               ^
[error] one error found

出于某种原因,Scala 2.12 似乎在迭代 Java 数组时遇到了问题。

getRequestList 返回以下对象:Array[Req]。

有人遇到过这个问题吗?

这是我遇到问题的代码部分:

  // Sorting the requests by Certificate Authority
  for (req <- request.req.getRequestList) {
    // Extracting the Key Hash from the request
    val keyHash = getKeyHash(req)
    // Extracting the Name Hash from the request
    val nameHash = getNameHash(req)
    // Retrieving the CA from the Key Hash or Name Hash
    val ca = keyHash.flatMap(getCertificateAuthorityFromKeyHash).map { ca =>
      Logger.debug(s"[${self.path.name}] - CA found based on Issuer Key Hash ('${keyHash.getOrElse("NA").toUpperCase}') -> '${ca.name}'")
      ca
    } orElse nameHash.flatMap(getCertificateAuthorityFromNameHash).map { ca =>
      Logger.debug(s"[${self.path.name}] - CA found based on Issuer Name Hash ('${nameHash.getOrElse("NA").toUpperCase}') -> '${ca.name}'")
      ca
    } getOrElse {
      Logger.debug(s"[${self.path.name}] - Unable to find CA based on Issuer Key Hash ('${keyHash.getOrElse("NA").toUpperCase}') and Name Hash ('${nameHash.getOrElse("NA").toUpperCase}'. Discarding request with Unauthorized status)")
      throw new UnknownCertificateAuthorityException("CertificateID does not reference a registered Certificate Authority")
    }
    if (reqsByCA.contains(ca.id.get)) {
      reqsByCA(ca.id.get) += req
    } else {
      reqsByCA += (ca.id.get -> ArrayBuffer(req))
    }
  }

request.re.getRequestList 返回一个 org.bouncycastle.cert.ocsp.Req (Array[org.bouncycastle.cert.ocsp.Req]) 的数组。

【问题讨论】:

  • 向我们展示您的代码。

标签: scala playframework


【解决方案1】:

经过进一步调查,问题出在这一行:

reqsByCA(ca.id.get) += req

我将其替换为:

reqsByCA(ca.id.get).append(req)

这对我来说是严格等价的......

现在它编译并运行了。

如果有人能解释我的原因,我将不胜感激。

不管怎样,我的问题解决了。

【讨论】:

    猜你喜欢
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    相关资源
    最近更新 更多