下面的代码是一次性的,使枚举在新的foreach循环中工作是一个失败的想法,但是由于我一直遇到泛型和通配符的问题,因此我希望对其进行编译.无论出于什么原因,我都看不出如何解决它.
那么,需要进行哪些更改才能进行编译?
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 entries()
{
final Set names;
final Enumeration extends ZipEntry> enumeration;
final IterableEnumeration extends ZipEntry> iteratable;
names = new HashSet();
// 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
implements Iterable
{
private final Enumeration enumeration;
public IterableEnumeration(final Enumeration e)
{
enumeration = e;
}
public Iterator iterator()
{
final EnumerationIterator 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(enumeration);
return (iterator);
}
}
class EnumerationIterator
implements Iterator
{
private final Enumeration enumeration;
public EnumerationIterator(final Enumeration 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”);
}
}
错误是:
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