,但子类不允许隐式 forloop。 为什么迭代器<>工作正常但for循环提示 Can only iterate over an array or an in-6ren">
gpt4 book ai didi

Java 显式迭代器有效。隐式 forloop 产生 "Can only iterate over an array or an instance of java.lang.Iterable"

转载 作者:行者123 更新时间:2023-12-01 18:35:57 26 4
gpt4 key购买 nike

我已经在基类中实现了 Iterable<>,但子类不允许隐式 forloop。

为什么迭代器<>工作正常但for循环提示

Can only iterate over an array or an instance of java.lang.Iterable

我希望 Iterable<> 接口(interface)在子类中可见。我错过了什么?

package tester;

import java.util.ArrayList;
import java.util.Iterator;

public class TestInher {

private Concrete<Integer> mList = new Concrete<Integer>();

public TestInher() {}

public abstract class Base<T>
implements Iterable<T>
{
protected ArrayList<T> list = new ArrayList<T>();

@Override
public Iterator<T> iterator() {return list.iterator();}

public abstract void add(T item);
}

public abstract class ClassAbstract<T> extends Base<T>{}

public class Concrete<T>
extends ClassAbstract<T>
{
@Override
public void add(T item) {list.add(item);}
}

public void doIt() {
for(int i=0; i<10; i++) {mList.add(i);}

Iterator<Integer> i = mList.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}

//Can only iterate over an array or an instance of java.lang.Iterable
for(Integer i : mList.iterator()) {
}
}
}

最佳答案

the enhanced for loop, you iterate over the Iterable ,而不是通过迭代器Iterable 获取在此循环中隐式使用的 Iterator,但 Iterable 本身并不是 Iterator。尝试一下Iterable本身。

for (Integer i : mList) {

关于Java 显式迭代器有效。隐式 forloop 产生 "Can only iterate over an array or an instance of java.lang.Iterable",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22022252/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com