我正在尝试为泛型实现Iterator设计模式。我不能使用泛型数组来存储集合,有人能帮我设计泛型类型的Iterator模式吗?
我的密码是:
public class NamesRepository<T> implements Container<T> {
public NamesRepository(){
names = new T[]; // Compilation error
}
public T names[];
@Override
public Iterator<T> getIterator() {
return new NameIterator();
}
private class NameIterator implements Iterator<T>{
private int index;
@Override
public boolean hasNext() {
if(index<names.length)
return true;
return false;
}
@Override
public T next() {
if(this.hasNext())
return names[index++];
return null;
}
}
}发布于 2014-01-15 17:57:55
正如之前多次讨论的那样,you can't directly create a generic array using the type parameter。如果必须使用数组,则可以跟踪该问题的答案。
但是,您可以创建一个类型参数的List。不需要任何技巧,而且更灵活。
public NamesRepository(){
names = new ArrayList<T>(); // Easy creation
}
public List<T> names;然后,迭代器的hasNext()方法可以将其index与names.size()进行比较,而next()方法可以返回names.get(index++)。您甚至可以通过调用Iterator来实现remove()接口所需的其他方法。
发布于 2022-10-19 06:29:27
函数NameRespositary()错误地创建了一个泛型类型列表。您必须通过类型参数创建它。
public NamesRepository(){ names = new ArrayList<T>(); } public List<T> names;
https://stackoverflow.com/questions/21144534
复制相似问题