【问题标题】:Strange Error with String in Scala 2.12.7 [duplicate]Scala 2.12.7中字符串的奇怪错误[重复]
【发布时间】:2019-06-14 20:41:43
【问题描述】:

在我的一个 Scala 应用程序中处理字符串时遇到了一个非常奇怪的错误,我无法解释!我所拥有的是一个看起来像这样的观察者:

class MqttObserver[String] extends Observer[String] {

  private val logger = Logger.of[MqttObserver[String]]

  override def onNext(elem: String): Future[Ack] = {
    logger.info(s"Got a message from Mqtt broker $elem")
    Continue
  }

  override def onError(ex: Throwable): Unit = {
    logger.error(s"Stream error happened ${ex.getMessage}")
  }

  override def onComplete(): Unit = {
    logger.info(s"Stream ended")
  }
}

然后我从

调用 onNext(elem: String)

这是错误:

[error]  found   : java.lang.String
[error]  required: String(in class MqttObservable)
[error]       mqttObserver.onNext(message.getPayload.toString)

这就是我打电话的方式!

  val callback: MqttCallback = new MqttCallback {
    override def connectionLost(cause: Throwable): Unit = {
      logger.info(cause)
    }
    override def deliveryComplete(token: IMqttDeliveryToken): Unit = {

    }
    override def messageArrived(topic: Predef.String, message: MqttMessage): Unit = {
      mqttObserver.onNext(message.getPayload.toString) // FAILS HERE!!!!
      logger.info("Using Default Console Callback --> Receiving Data, Topic : %s, Message : %s".format(topic, message))
    }
  }

【问题讨论】:

标签: string scala mqtt


【解决方案1】:

替换

class MqttObserver[String] extends Observer[String]

class MqttObserver[S] extends Observer[S]

否则类型参数String隐藏标准类型java.lang.String

【讨论】:

  • 您能解释一下原因吗?
  • @sparkr 类型参数String 隐藏标准类型java.lang.String
  • 还有其他方法可以解决这个问题吗?我无法更改 MqttObserver 签名
  • @sparkr 类型参数的名称不是签名的一部分,可以任意替换。只需使用一些不太容易混淆的名称(不是String)。
  • @sparkr 很奇怪。准备 MCVE。
猜你喜欢
  • 2019-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
相关资源
最近更新 更多