-
20-08-2019 - |
题
我有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
工作,因为它返回一个Enumeration<? extends ZipEntry>
(见相关问题)和Scalac不断告诉我
type mismatch; found : java.util.Iterator[?0]
where type ?0 <: java.util.zip.ZipEntry
required: Iterator[?]
我无法弄清楚如何使某物谈话工作。像
List.fromIterator(new ZipFile(z).entries))
解决方案
List.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
有一直有关刚好使用了java.util.Iterator统一斯卡拉和Java 2.8中的一些讨论。不利的一面,Java的迭代器拥有remove方法,这是没有意义的Scala的不可改变的集合。 UnsupportedOperationException异常?布莱什!从有利的一面,使得这样的错误的东西走了。
编辑:我添加了一个Trac的问题,错误信息将是更清晰了它说:“要求:[?] scala.Iterator”的 https://lampsvn.epfl.ch/trac/scala/ticket/2102
其他提示
据我所知,枚举Scala中2.7.x具有“元素”的方法和Scala 2.8.0具有“迭代”方法returing一个Iterator。为什么不使用他们?
呵呵,没关系,没关系。 Java的的枚举。
不隶属于 StackOverflow