Java 通配符和泛型错误
下面的代码是一次性的,让枚举在新的foreach循环中工作是一个失败的想法,但是我想让它编译,因为我一直遇到泛型和通配符的问题。无论出于什么原因,我都看不出如何修复它 那么,需要做哪些更改才能使此编译成功Java 通配符和泛型错误,java,Java,下面的代码是一次性的,让枚举在新的foreach循环中工作是一个失败的想法,但是我想让它编译,因为我一直遇到泛型和通配符的问题。无论出于什么原因,我都看不出如何修复它 那么,需要做哪些更改才能使此编译成功 import java.util.Enumeration; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.zip.ZipEntry; import java
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");
}
}
import java.util.Enumeration;
导入java.util.HashSet;
导入java.util.Iterator;
导入java.util.Set;
导入java.util.zip.ZipEntry;
导入java.util.zip.ZipFile;
公共班机
{
私人ZipFile ZipFile;
公共集合项目()
{
最终定名;
最终枚举在构造参数化类型时,不能指定通配符。这是正确的语法:
iteratable = new IterableEnumeration<ZipEntry>(enumeration);
及
类枚举迭代器
实现迭代器
{
私有最终枚举问题是…?为了使其编译,必须做哪些更改…抱歉,我认为这很清楚…我将更新它。是的,我想我可以将错误消息放在…oops&thanks中。这可能会有所帮助:出于好奇,您在java之前使用的编程语言是什么?我尝试删除了该c中的ode但不起作用。原因是什么?新消息是:找不到构造函数IterableEnumeration(java.util.Enumeration)我不明白。为什么不可能创建这样的构造函数?嗯……晚了几个小时:)无论如何,谢谢!
iteratable = new IterableEnumeration<ZipEntry>(enumeration);
class IterableEnumeration<T>
implements Iterable<T>
{
private final Enumeration<? extends T> enumeration;
public IterableEnumeration(final Enumeration<? extends T> e)
{
enumeration = e;
}
...
class EnumerationIterator<T>
implements Iterator<T>
{
private final Enumeration<? extends T> enumeration;
public EnumerationIterator(final Enumeration<? extends T> e)
{
enumeration = e;
}
...