Невозможно назначить возвращенный java.util.ArrayList для scala.collection.mutable.ArrayBuffer. Зачем?

Я импортировал это:

import scala.collection.JavaConversions._

val size: Int = blubb.getSize
var fields: ArrayBuffer[Field] = new ArrayBuffer[Field]

size match
{
    case 1 => fields.append(field)
    case 2 => fields = field.getNeighbours)
}

теперь getNeighbours возвращает java.util.ArrayList вместо ArrayBuffer (это Java-класс, который я не контролирую).

Компилятор говорит

Выражение типа ArrayList[Field] не соответствует ожидаемому типу ArrayBuffer[Field]

Разве JavaConversions не должен заботиться об этом? Как я могу легко преобразовать ArrayList в ArrayBuffer? (Я не хочу заменять ArrayBuffer на ArrayList в коде Scala!)

2 ответа

Решение

ArrayBuffer это конкретная реализация Bufferпри поддержке Array, Вы не можете иметь ArrayBuffer при поддержке ArrayList,

JavaConversions предлагает вам конвертацию из java.util.List в Buffer (не ArrayBuffer).

Либо вы перепечатаете свой fields переменная как Buffer[Field]или вы должны скопировать элементы ArrayList к новому ArrayBuffer:

fields = ArrayBuffer(field.getNeighours: _*)

Потому что ArrayBuffer не является ArrayList. sjrd предлагает использовать встроенное преобразование javas, но вы также можете просто использовать цикл for для копирования данных из массива в новый ArrayBuffer перед его передачей.

Другие вопросы по тегам