【发布时间】:2014-09-19 04:34:09
【问题描述】:
我想在 for-each 循环中迭代给定 Actor 的子级,如下所示:
for(ActorRef child: this.getContext().children()){
// do things
}
这会产生一个错误:
HelloWorld.java:78: error: for-each not applicable to expression type
for(ActorRef child: this.getContext().children())
^
required: array or java.lang.Iterable
found: Iterable<ActorRef>
1 error
The docs for UntypedActorContext 说children() 方法应该返回一个'Iterable[ActorRef]',但是那个特定'Iterable'的类型定义的内联超链接导致了Scala Iterable-type 的文档而不是与Java类型相比,它们不是一回事。
这可以在实践中得到证实:从children() 调用返回的对象未通过“instanceOf Iterable”检查,并且对其调用“getClass()”返回“类akka.actor.dungeon.ChildrenContainer$ChildrenIterable”。
我似乎很清楚,这不是 Java Iterable 并且错误是适当的。但是我如何将它强制或编组为 Java Iterable? This link in the Scala docs 建议有 Scala->Java 的转换函数,但我无法确定要导入的内容或如何从 Java 调用它们;我见过的唯一例子是 Scala。
附:我意识到我可以使用 while 循环和 children().iterator() 返回的 Scala-Iterator 在这里构造等效于 for-each 循环。我真正想要的是了解如何使用 Scala 提供的类型转换例程。
【问题讨论】: