当前位置: 首页 > 面试题库 >

在同一类中实现Java Iterator和Iterable?

冯祺
2023-03-14
问题内容

我试图了解Java IteratorIterable接口

我正在写这堂课

class MyClass implements Iterable<String> {
    public String[] a = null;
    public MyClass(String[] arr) {
        a = arr;    
    }

    public MyClassIterator iterator() {
        return new MyClassIterator(this);
    }

    public class MyClassIterator implements Iterator<String> {
        private MyClass myclass = null;
        private int count = 0;
        public MyClassIterator(MyClass m) {
            myclass = m;    
        }

        public boolean hasNext() {
            return count < myclass.a.length;
        }
        public String next() {
            int t = count;
            count++;
            return myclass.a[t];
        }

        public void remove() {
            throw new UnsupportedOperationException();
        }
    }   
}

它似乎正在工作。

我应该有:

Myclass implements Iterable<Stirng>, Iterator<String> {

}

或者我应该把MyClassIterator外面MyClass

class MyClass implements Iterable<String> {
    public String[] a = null;
    public MyClass(String[] arr) {
        a = arr;    
    }
    public MyClassIterator iterator() {
        return new MyClassIterator(this);
    }
}


    public class MyClassIterator implements Iterator<String> {
        private MyClass myclass = null;
        private int count = 0;
        public MyClassIterator(MyClass m) {
            myclass = m;    
        }

        public boolean hasNext() {
            return count < myclass.a.length;
        }
        public String next() {
            int t = count;
            count++;
            return myclass.a[t];
        }

        public void remove() {
            throw new UnsupportedOperationException();
        }
    }

哪一个更好?


问题答案:

你应该几乎 从来没有 同时实现Iterable,并Iterator在同一个班。他们做不同的事情。迭代器自然是 有状态的
-当您迭代使用它时,它必须更新其世界观。但是,迭代器仅需要能够创建新的迭代器。特别是,您可能有多个迭代器同时处理同一个原始可迭代对象。

您当前的方法几乎可以-我会更改实现的某些方面,但是就职责分离而言还可以。



 类似资料:
  • 我最近在我没有编写的代码中遇到了这个场景,虽然这种方法可能有一些设计上的好处,但我似乎无法从我自己的大脑中挤出这个原理。所以在我看起来很傻之前,我希望这里有一些反馈。 服务接口如下所示: 然后是一个向服务接口添加泛型引用的基类,其中T扩展了服务,但随后整个基类也实现了该接口。类似这样的事情: 你为什么要这么做?我注意到,在实践中,ServiceBase的扩展总是使用与正在声明的类名相同的类名T;所

  • 在Java,你可以做这样的事情: 在Kotlin有可能做同样的事情吗?假设是抽象的,并且不实现

  • 我在同一个活动中使用了两个时间选择器,让用户为特定任务选择开始时间和停止时间,我使用了支持库中可用的DialogFragment类,以向后兼容旧的Android版本。

  • 问题内容: 我想拥有一个在Java中同时实现Map和List接口的对象。这个想法与以下问题类似:Java OrderedMap 我想将名称/值对添加到列表中,并让列表保留序列,但还可以按名称进行查找: 这是问题所在:创建此类时: 我收到一个编译错误: 如果我没有实现Map和List接口,那么有很多Java集合方法无法在此数据结构上使用。 (此外,上面的Java Ordered Map中提出的解决方

  • 我们从应该提供web api服务的项目中删除了核心库:d 如果不可能在同一个项目中使用,那么gateway众所周知的做法应该是怎样的,我应该在每个api微服务前面放一个gateway,还是应该在我的由多个微服务组成的项目中有一个单一的gateway?