gpt4 book ai didi

java - 将 scala.collection.iterator 对象放入 scala 类构造函数中

转载 作者:行者123 更新时间:2023-12-01 10:36:49 24 4
gpt4 key购买 nike

我有一个 scala 类:

Rts.scala

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

现在我尝试将 Tse 列表从 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

将列表放入构造函数的正确方法是什么?

最佳答案

Scala 的 scala.collection.Iteratorjava.util.Iterator 的类型不同。另请参阅this question .

简而言之,类似以下内容应该有效:

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

(用于从 Java 调用对象方法,see here)。

由于这相当难看,所以最好在 Scala 库中定义一个辅助 Java API。例如:

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);
<小时/>

否则,迭代器只能使用一次。你确定这就是你想要的吗?如果您使用其他集合(例如 SeqIterable),可能会更好。同样,您可以在 JavaConvertersJavaConversions 中找到与 Java 互操作的方法(有关差异,请参阅 here)。

关于java - 将 scala.collection.iterator 对象放入 scala 类构造函数中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34653178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com