Der folgende Code ist Wegwerf, eine gescheiterte Idee, eine Enumeration in der neuen foreach-Schleife zu arbeiten, aber ich würde es kompilieren lassen, da ich immer wieder auf ein Problem mit Generics und Joker stoßen. Aus welchen Gründen auch immer kann ich nicht sehen, wie man es repariert.Wildcards und Generics Fehler
Also, welche Änderungen müssen vorgenommen werden, um diese Kompilierung zu machen?
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
public class Main
{
private ZipFile zipFile;
public Set<String> entries()
{
final Set<String> names;
final Enumeration<? extends ZipEntry> enumeration;
final IterableEnumeration<? extends ZipEntry> iteratable;
names = new HashSet<String>();
// zipFile.entries() returns "Enumeration<? extends ZipEntry>"
enumeration = zipFile.entries();
// this line won't compile
iteratable = new IterableEnumeration<? extends ZipEntry>(enumeration);
for(final ZipEntry entry : iteratable)
{
if(!(entry.isDirectory()))
{
names.add(entry.getName());
}
}
return (names);
}
}
class IterableEnumeration<T>
implements Iterable<T>
{
private final Enumeration<T> enumeration;
public IterableEnumeration(final Enumeration<T> e)
{
enumeration = e;
}
public Iterator<T> iterator()
{
final EnumerationIterator<T> iterator;
// yeah cannot do this since an Iterable is supposed to work multiple times on the same object and Enumeration is descructive...
iterator = new EnumerationIterator<T>(enumeration);
return (iterator);
}
}
class EnumerationIterator<T>
implements Iterator<T>
{
private final Enumeration<T> enumeration;
public EnumerationIterator(final Enumeration<T> e)
{
enumeration = e;
}
public boolean hasNext()
{
return (enumeration.hasMoreElements());
}
public T next()
{
return (enumeration.nextElement());
}
public void remove()
{
throw new UnsupportedOperationException("Cannt remove via an Enumeration");
}
}
Der Fehler ist:
Main.java:26: unexpected type
found : ? extends java.util.zip.ZipEntry
required: class or interface without bounds
iteratable = new IterableEnumeration<? extends ZipEntry>(enumeration);
^
1 error
und die Frage ist ....? – OscarRyz
was müssen Änderungen vorgenommen werden, um es kompilieren zu lassen ... Entschuldigung, das war klar ... Ich werde es aktualisieren. – TofuBeer
na ja, ich denke, ich hätte die Fehlermeldung in ... oops & thanks setzen können – TofuBeer