У меня есть класс Scala, конструктор которого принимает список параметров переменной длины.Синтаксис для вызова параметра переменной длины Функция Scala из Java?
case class ItemChain(items: Item*)
От Scala это можно назвать как так
ItemChain(Item(), Item())
Я не могу понять, синтаксис для вызова из Java. Если я делаю это
new ItemChain(new Item(), new Item())
Я получаю ошибку компилятора, что говорит эта строка не совпадает с подписью scala.collection.seq<Item>
.
Я могу непосредственно создать экземпляр объекта последовательности Scala из Java.
new scala.collection.Seq<Item>()
Но я не могу понять, как впоследствии добавить свои два Item
экземпляра к нему. Если я создаю Java List
из Item
и передам его scala.collection.Seq
Я получаю ошибку времени выполнения.
Я не знаком с Scala, но это звучит как Scala использует его собственный класс для аргументов Маршалла в функции переменной длиной. Это отличается от Java, который передает их как массив. – Powerlord
Похоже, самый простой способ получить Seq от Java является использование [JavaConversions] [1] [1]: http://stackoverflow.com/questions/6784593/how-to-create- a-scala-collection-immutable-seq-from-a-java-list-in-java – DPM
'@ scala.annotation.varargs' обычно может помочь в подобных ситуациях, но не для конструкторов и, по-видимому, не для' ItemChain. apply', хотя вы не получите сообщение об ошибке, если вы положите его из определения класса case (что для меня немного удивительно). Положите его на метод 'create' в сопутствующем объекте, и вам должно быть хорошо идти. –