2016-01-07 1 views
0

У меня есть класс SCALA:Ввод объекта scala.collection.iterator в конструктор класса Scala

Rts.scala

class Rts(buffer:Iterator[Tse]) extends Ts 
{ //Some methods} 

Теперь я пытаюсь поставить список Це конструктору выше класс от класса Java: Резюме

Tse tse1= new Tse(1285927200000L, 1285928100000L, 0.0); 

Tse tse2 = new Tse(1285928100000L, 1285929000000L, 1.0); 

Tse tse3= new Tse(1285929000000L, 1285929900000L, 2.0); 

Tse tse4 = new Tse(1285929900000L, 1285930800000L, 3.0); 

List<Tse> entryList = new ArrayList<Tse>(); 
entryList.add(tse1); 
entryList.add(tse2); 
entryList.add(tse3); 
entryList.add(tse4); 

Iterator<Tse> iterator = entryList.iterator(); 
Rts rts= new Rts(iterator); //compile time error 

Ошибка:

The constructor Rts(Iterator<Tse>) is undefined 

Каков правильный способ поместить список в конструктор?

ответ

1

Scala's scala.collection.Iterator не такой же тип, как java.util.Iterator. См. Также this question.

Короче говоря, что-то вроде следующего должно работать:

new Rts(scala.collection.JavaConversions$.MODULE$.asScalaIterator(iterator)); 

(для вызова методов объектов из Java, see here).

Поскольку это довольно уродливо, лучше определить вспомогательный Java API в вашей библиотеке Scala. Например:

class Rts(buffer: Iterator[Tse]) extends Ts { 
    // overloaded constructor that can be used from Java 
    def this(buffer: java.util.Iterator[Tse]) = this({ 
    import scala.collection.JavaConverters._ 
    buffer.asScala 
    }) 
} 

И тогда вызов должен работать непосредственно:

new Rts(iterator); 

В противном случае итератора может быть использован только один раз. Вы уверены, что это то, что вы хотите? Вероятно, было бы лучше, если бы вы использовали другую коллекцию, такую ​​как Seq или Iterable. Снова вы можете найти способы взаимодействия с Java в JavaConverters и JavaConversions (см. here за разницу).

+0

Вы можете использовать scala.collection.JavaConversions.asScalaIterator, который немного менее уродлив. – bdew

 Смежные вопросы

  • Нет связанных вопросов^_^