Переопределение Java-метода с параметром типа Vector - PullRequest
1 голос
/ 06 июля 2019

Я реализую ContractNetInitiator от Jade в Scala, и мне нужно переопределить этот метод:

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]», но он не работает, поскольку не соответствует суперклассу .

Есть ли способ добавить элементы в акцепты?

1 Ответ

3 голосов
/ 06 июля 2019

Вам нужно будет разыграть его:

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

Обычно этого следует избегать, но в данном случае это исключительно вина библиотеки за использование необработанных типов и только документирование эффективных параметров типов.

...