Question

J'ai la conversion implicite suivante pour 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()
     }
   }

Malheureusement, cela ne fonctionne pas pour ZipFile.entries car elle renvoie un Enumeration<? extends ZipEntry> (voir question connexe ) et Scalac me répète sans cesse

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

Je ne vois pas comment faire fonctionner la conversation avec qch. comme

List.fromIterator(new ZipFile(z).entries))
Était-ce utile?

La solution

List.fromIterator attend un scala.Iterator mais votre implicite renvoie un java.util.Iterator.

Cela fonctionne

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'ajout d'une importation en haut empêche la compilation

import java.util.Iterator

Il a été question d'unifier Scala et Java dans la version 2.8 en utilisant simplement java.util.Iterator. Inconvénient, Iterator de Java a une méthode de suppression qui n’a aucun sens pour les collections immuables de Scala. UnsupportedOperationException? Blech! Du côté des points positifs, des choses comme cette erreur disparaissent.

Modifier: j'ai ajouté un problème Trac selon lequel le message d'erreur aurait été plus clair s'il avait déclaré & "Requis: scala.Iterator [?] &"; https://lampsvn.epfl.ch/trac/scala/ticket/2102

Autres conseils

Pour autant que je sache, Énumération dans Scala 2.7.x a un " éléments & "; method et Scala 2.8.0 a un " itérateur " méthode returing un itérateur. Pourquoi ne pas les utiliser?

Oh, peu importe, peu importe. Énumération de Java.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top