работа с Java-итераторами в Scala

1

Я пытаюсь выполнить итерацию с помощью java util.iterator с помощью Scala, но у java util.iterator возникли проблемы с тем, что объекты были 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)
  }


}
  • 0
    Похоже, getAllSymbols.iterator() не возвращает Iterator MibSymbol . Какая подпись getAllSymbols ?
  • 0
    Точно сказать не могу. Согласно документации, это 'public java.util.Collection getAllSymbols ()' Это публичная библиотека
Теги:

1 ответ

1

Используйте явный 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: вы также можете использовать для понимания:

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._ делает все волшебство для вас. Вам нужно только убедиться, что типы верны.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню