Generics 将枚举转换为迭代器

Generics 将枚举转换为迭代器,generics,scala,iterator,enumeration,type-inference,Generics,Scala,Iterator,Enumeration,Type Inference,我对java.util.Enumerations implicit def enumerationIterator[A](e : Enumeration[A]) : Iterator[A] = { new Iterator[A] { def hasNext = e.hasMoreElements def next = e.nextElement def remove = throw new UnsupportedOperationE

我对
java.util.Enumerations

   implicit def enumerationIterator[A](e : Enumeration[A]) : Iterator[A] = {
     new Iterator[A] {
        def hasNext = e.hasMoreElements
        def next = e.nextElement
        def remove = throw new UnsupportedOperationException()
     }
   }

不幸的是,它不适用于
ZipFile.entries
,因为它返回一个
枚举列表。fromIterator需要一个scala.Iterator,但隐式返回的是java.util.Iterator

这很有效

import java.util.Enumeration

implicit def enum2Iterator[A](e : Enumeration[A]) = new Iterator[A] {
  def next = e.nextElement
  def hasNext = e.hasMoreElements
}

import java.util.zip.{ZipFile, ZipEntry}
val l = List.fromIterator(new ZipFile(null:java.io.File).entries)
在顶部添加一个导入可防止编译

import java.util.Iterator
关于在2.8中仅使用Java.util.Iterator统一Scala和Java,已经有一些讨论。另一方面,Java的迭代器有一个remove方法,这对于Scala的不可变集合毫无意义。不支持操作异常?哎哟!从好的方面来说,这样的错误会消失


编辑:我已经添加了一个Trac问题,如果错误消息是“必需的:scala.Iterator[?]”的话,它会更清晰。

据我所知,scala 2.7.x中的枚举有一个“elements”方法,scala 2.8.0有一个“Iterator”方法在迭代器中返回。为什么不用呢

哦,没关系,没关系。Java的枚举

import java.util.Enumeration

implicit def enum2Iterator[A](e : Enumeration[A]) = new Iterator[A] {
  def next = e.nextElement
  def hasNext = e.hasMoreElements
}

import java.util.zip.{ZipFile, ZipEntry}
val l = List.fromIterator(new ZipFile(null:java.io.File).entries)
import java.util.Iterator