for-each循环只能遍历数组或java.lang.Iterable的实例

时间:2013-08-25 21:34:11

标签: java

以下代码不起作用。这段代码出了什么问题?编译器在for循环中抱怨NumberList不是Iterable类。

每个循环可以使用哪种类?如何使NumberList可迭代?我尝试制作NumberList implement Iterable,但它似乎不起作用,因为我不知道如何正确定义迭代器。

如果有人可以演示如何使这段代码有效,或者将我链接到一个很棒的教程。

public class Test{
    public class NumberList{
        private int numItems;
        private Number[] numbers;

        public NumberList(int size){
            this.numbers = new Number[size];
            this.numItems=0;
        }

        public void add(Number n){
            this.numbers[this.numItems++]=n;
        }
    }

    public void printPairs() {
        ArrayList<Integer> num=new ArrayList<Integer>();

        NumberList numbers = new NumberList(50);
        numbers.add(4);
        numbers.add(5);
        numbers.add(6);

        for(Number n1: numbers){
            System.out.println(n1);
        }
    }
}

3 个答案:

答案 0 :(得分:4)

NumberList没有实现Iterable。就编译器而言,它只涉及任何其他类。

你需要做这样的事情

public class NumberList implements Iterable<Number> {

    private int numItems;
    private Number[] numbers;

    public NumberList(int size) {
        this.numbers = new Number[size];
        this.numItems = 0;
    }

    public void add(Number n) {
        this.numbers[this.numItems++] = n;
    }

    @Override
    public Iterator<Number> iterator() {
        return Arrays.asList(numbers).subList(0, numItems).iterator();
    }
}

答案 1 :(得分:3)

您的班级NumberList需要实施Iterable界面:

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

public class Test {
    public class NumberList implements Iterable<Number> {
        private int numItems;
        private Number[] numbers;

        public NumberList(int size) {
            this.numbers = new Number[size];
            this.numItems = 0;
        }

        public void add(Number n) {
            this.numbers[this.numItems++] = n;
        }

        @Override
        public Iterator<Number> iterator() {
            return Arrays.asList(numbers).iterator();
        }

    }

    public void printPairs() {

        ArrayList<Integer> num = new ArrayList<Integer>();

        NumberList numbers = new NumberList(50);
        numbers.add(4);
        numbers.add(5);
        numbers.add(6);

        for (Number n1 : numbers) {
            System.out.println(n1);
        }
    }
}    

答案 2 :(得分:0)

您需要implement Iterable interface。在这种情况下,这只意味着您需要向Iterator<T> iterator()类添加方法NumberList。由于您的列表在这种情况下仅包含数字,因此泛型类型参数T仅为Number