【问题标题】:Overriding java method with Vector type parameter用 Vector 类型参数覆盖 java 方法
【发布时间】:2019-07-05 23:09:00
【问题描述】:

我正在 scala 中从 Jade 实现 ContractNetInitiator,我需要重写此方法:

protected void handleAllResponses(java.util.Vector responses,java.util.Vector acceptances)

并像这样实现它:

override def handleAllResponses(responses: Vector[_], acceptances: Vector[_]): Unit = {
    var acceptProposal: ACLMessage = null
    var bestProposal = Integer.MAX_VALUE
    var bestProposer = ""

    // Find best proposal and reject all proposal
    val e = responses.elements()

    while (e.hasMoreElements) {
        val response: ACLMessage = e.nextElement().asInstanceOf[ACLMessage]

        if (response.getPerformative == ACLMessage.PROPOSE) {
            val reply = response.createReply()
            reply.setPerformative(ACLMessage.REJECT_PROPOSAL)
            acceptances.addElement(reply) // Can't add the reply : "Type mismatch, expected: _$1, actual: ACLMessage"

            if (response.getUserDefinedParameter("Value").toInt < bestProposal) {
                bestProposal = response.getUserDefinedParameter("Value").toInt
                bestProposer = response.getSender.getLocalName
                acceptProposal = reply
            }
        }
    }

    // Accept proposal
    if (acceptProposal != null) {
        acceptProposal.setPerformative(ACLMessage.ACCEPT_PROPOSAL)
    }
}

但是当我尝试添加对接受的回复时,我收到了 Type mismatch。

我尝试将“acceptances: Vector[_]”更改为“acceptances: Vector[ACLMessage]”和“acceptances: Vector[Any]”,但它不起作用,因为它与超类不对应.

有没有办法在接受中添加元素?

【问题讨论】:

    标签: scala scala-java-interop agents-jade raw-types


    【解决方案1】:

    你需要投射它:

     acceptances.asInstanceOf[Vector[ACLMessage]].addElement(reply)
    

    通常这是要避免的,但在这种情况下,使用raw types 并且只记录有效的类型参数完全是库的错。

    【讨论】:

      猜你喜欢
      • 2015-02-18
      • 2013-08-22
      • 2019-08-17
      • 1970-01-01
      • 2015-05-22
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 2020-06-03
      相关资源
      最近更新 更多