2009-06-28 17 views
5

que tiene la siguiente conversión implícita para java.util.EnumerationsEnumeración La conversión a iterador

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() 
    } 
    } 

Por desgracia, no funciona para ZipFile.entries porque devuelve un Enumeration<? extends ZipEntry> (ver related question) y scalac me dice

type mismatch; found : java.util.Iterator[?0] 
    where type ?0 <: java.util.zip.ZipEntry 
    required: Iterator[?] 

No puedo entender cómo hacer que la conversación funcione en cierto modo. como

List.fromIterator(new ZipFile(z).entries)) 

Respuesta

7

List.fromIterator espera una scala.Iterator pero su implícita está volviendo un java.util.Iterator.

Esto funciona

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) 

Adición de una importación en la parte superior impide la compilación

import java.util.Iterator 

Ha habido cierto debate acerca de la unificación de Scala y Java en 2.8 sólo por el uso java.util.Iterator. En el lado negativo, el iterador de Java tiene un método de eliminación que no tiene sentido para las colecciones inmutables de Scala. UnsupportedOperationException? ¡Blech! En el lado positivo eso hace que cosas como este error desaparezcan.

Edición: He añadido un tema Trac que el mensaje de error hubiera sido más claro lo tenía dicho "requerido: [?] Scala.Iterator" https://lampsvn.epfl.ch/trac/scala/ticket/2102

+0

ah un error nuevo ;-) gracias. –

1

Por lo que yo sé, la enumeración en Scala 2.7. x tiene un método de "elementos" y Scala 2.8.0 tiene un método de "iterador" que retoma un iterador. ¿Por qué no usarlos?

Oh, no importa, no importa. Enumeración de Java.

Cuestiones relacionadas