Невозможно назначить возвращенный 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 перед его передачей.