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