首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通用类型的迭代器设计模式

通用类型的迭代器设计模式
EN

Stack Overflow用户
提问于 2014-01-15 17:42:40
回答 2查看 596关注 0票数 0

我正在尝试为泛型实现Iterator设计模式。我不能使用泛型数组来存储集合,有人能帮我设计泛型类型的Iterator模式吗?

我的密码是:

代码语言:javascript
复制
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;
        }

    }
}
EN

回答 2

Stack Overflow用户

发布于 2014-01-15 17:57:55

正如之前多次讨论的那样,you can't directly create a generic array using the type parameter。如果必须使用数组,则可以跟踪该问题的答案。

但是,您可以创建一个类型参数的List。不需要任何技巧,而且更灵活。

代码语言:javascript
复制
public NamesRepository(){
    names = new ArrayList<T>();  // Easy creation
}
public List<T> names;

然后,迭代器的hasNext()方法可以将其indexnames.size()进行比较,而next()方法可以返回names.get(index++)。您甚至可以通过调用Iterator来实现remove()接口所需的其他方法。

票数 1
EN

Stack Overflow用户

发布于 2022-10-19 06:29:27

函数NameRespositary()错误地创建了一个泛型类型列表。您必须通过类型参数创建它。

public NamesRepository(){ names = new ArrayList<T>(); } public List<T> names;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21144534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档