我遇到这个错误,我不明白为什么。
我是Java的初学者,但我可以理解for-each循环仅适用于可迭代对象。在这里,我想将类SetOfObjects创建为ArrayList<SubObject>。在toString方法中,循环没有问题,但是在myFunction中,我得到了错误。
有人可以告诉我我在做什么错吗?

public class SetOfObjects {
    private ArrayList<SubObject> setOfObjects;

    public SetOfObjects(ArrayList<SubObjects> arr){
        this.setOfObjects = arr;
    }

    @Override
    public String toString() {
        String finalString = "";
        for (SubObject obj : setOfObjects) {
            finalString += obj.toString();
        }
        return finalString;
    }

    public SetOfObjects myFunction(SetOfObjects aSet){
        for (SubObject obj : aSet) {    <----ERROR
            //do something
        }
    }

最佳答案

SetOfObjects不实现Iterable<? extends SubObject>(也不是数组)。从JLS 14.14.2:

表达式的类型必须是Iterable或数组类型(第10.1节),否则会发生编译时错误。

要么迭代aSet.setOfObjects(假设这是您实际上要迭代的内容):

for (SubObject obj : aSet.setOfObjects) {

或者让SetOfObjects实现Iterable<SubObject>:
class SetOfObjects implements Iterable<SubObject> {

  // ...

  @Override public Iterator<SubObject> iterator() {
    return setOfObjects.iterator();
  }

07-26 04:29