java - 在 Scala 中使用 java 迭代器

标签 java scala

我尝试使用 Scala 迭代 java util.iterator,但在将对象转换为正确的类时遇到问题。

我收到错误:

type mismatch; found: java.util.Iterator[?0] where type ?0 
required : java.util.iterator[net.percederberg.mibble.MibSymbol]
  val iter:util.Iterator[MibSymbol] == mib_obj.getAllSymbols.iterator()

代码如下:

import java.io.File
import java.util
import net.percederberg.mibble._
import scala.collection.immutable.HashMap
import scala.collection.JavaConversions._

object Bacon {
  def main(args:Array[String]) {
    println("hello")
    val mib_obj:Mib = loadMib(new File("/Users/tjones24/dev/mibs/DOCS-IF-MIB.my"))
    val iter:util.Iterator[MibSymbol] = mib_obj.getAllSymbols.iterator()
    while(iter.hasNext()) {
      var obj:MibSymbol = iter.next()
      println(obj.getName())
    }

  }
  def loadMib(file: File): Mib = {
    var loader: MibLoader = new MibLoader()
    loader.addDir(file.getParentFile())
    return loader.load(file)
  }


}

最佳答案

使用显式类型转换asInstanceOf[Iterator[MibSymbol]]:

  def main(args: Array[String]) {
    println("hello")
    val mib_obj: Mib = loadMib(new File("/Users/tjones24/dev/mibs/DOCS-IF-MIB.my"))
    val x = mib_obj.getAllSymbols.iterator()
    val iter: util.Iterator[MibSymbol] = x.asInstanceOf[Iterator[MibSymbol]]
    while (iter.hasNext()) {
      var obj: MibSymbol = iter.next()
      println(obj.getName())
    }
  }

  def loadMib(file: File): Mib = {
    var loader: MibLoader = new MibLoader()
    loader.addDir(file.getParentFile())
    return loader.load(file)
  }

注意:如果缺少运行时类型信息,这可能会失败。

EDIT1:您还可以使用 for 理解:

val mib_obj: Mib = loadMib(new File("/Users/tjones24/dev/mibs/DOCS-IF-MIB.my"))
for ( obj <- mib_obj.getAllSymbols) {
  println(obj.asInstanceOf[MibSymbol].getName())
}

import scala.collection.JavaConversions._ 为您完成所有魔法。您只需确保类型正确即可。

关于java - 在 Scala 中使用 java 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29413639/

相关文章:

java - 自定义添加应用程序链接不起作用

scala - Play框架重启时如何重新加载akka调度程序

scala - 将 Json4S 迁移到 Circe

scala - 为什么我应该使用 object vs trait Dependencies 并导入它 vs mixin 来构建定义?

java - JComboBox 将起始索引设置为 "1"

java - android.util.GregorianCalendar : will c. add(Calendar.DAY_OF_MONTH, 1) 回滚还是前进?

scala - 替换 Spark 数据框中 Array[long] 中的分隔符

scala - 为什么 scala self 类型不是其要求的子类型

java - JMock "unexpected invocation"当相同的调用是 "expected once, never called"

java - Mongodb 在 Java 驱动程序中插入 $current Date