java - for-each 不适用于表达式类型

标签 java

我遇到了这个错误,我不明白为什么。 我是 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 :

The type of the Expression must be Iterable or an array type (§10.1), or a compile-time error occurs.

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

for (SubObject obj : aSet.setOfObjects) {

或制作SetOfObjects实现 Iterable<SubObject> :

class SetOfObjects implements Iterable<SubObject> {

  // ...

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

关于java - for-each 不适用于表达式类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47940923/

相关文章:

java - 其他替代方案使 rand.nextDouble() beetwen -1 和 1

java - 在单独的注释中测试配置注释

java - 映射 100% 后 Hadoop 变慢

java - 使用 spring 将枚举的值注入(inject)到属性中

java - 为什么今天有人会使用 Java 命令行选项 -Xrs?

java - 生成动态密码重置链接

java - openjdk-11.0.1_linux-x64_bin.tar url 不起作用(https ://download. java.net/java/GA/jdk11/13/GPL/openjdk-11.0.1_linux-x64_bin.tar.gz )

java - 为什么 Tomcat 的 LifyCycleSupport.java 使用数组而不是任何高级容器(ArrayList)来存储监听器?

java - 在 Java 中使用一个对象的泛型类型作为另一个对象的类型信息

java - 如何检查内存泄漏?