Domanda

Ho la seguente conversione implicita per 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()
     }
   }

Sfortunatamente non funziona per ZipFile.entries perché restituisce un Enumeration<? extends ZipEntry> (vedi domanda correlata ) e Scalac continua a dirmelo

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

Non riesco a capire come far funzionare la conversazione in STH. come

List.fromIterator(new ZipFile(z).entries))
È stato utile?

Soluzione

List.fromIterator prevede uno scala.Iterator ma il tuo implicito sta restituendo un java.util.Iterator.

Funziona

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)

L'aggiunta di un'importazione nella parte superiore impedisce la compilazione

import java.util.Iterator

C'è stata qualche discussione sull'unificazione di Scala e Java in 2.8 semplicemente usando java.util.Iterator. Il rovescio della medaglia, Iterator di Java ha un metodo di rimozione che non ha senso per le collezioni immutabili di Scala. UnsupportedOperationException? Blech! Il lato positivo che fa scomparire cose come questo errore.

Modifica: ho aggiunto un problema di Trac secondo cui il messaggio di errore sarebbe stato più chiaro se avesse detto " richiesto: scala.Iterator [?] " https://lampsvn.epfl.ch/trac/scala/ticket/2102

Altri suggerimenti

Per quanto ne so, l'Enumerazione in Scala 2.7.x ha un " elementi " metodo e Scala 2.8.0 ha un " iteratore " metodo di ritenzione di un iteratore. Perché non usarli?

Oh, non importa, non importa. enumerazione di Java.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top