创建我自己的增强for循环

时间:2014-02-22 06:47:57

标签: java generics for-loop

如果我要在Java中创建自己的数据类型,我想知道我是如何做到的,如果可能的话,将它“增强为循环兼容”。 例如:

System.out.println(object); //This implicitly calls the object's toString() method

现在,如果我想使用自己的数据类型进行增强的for循环,我该怎么做?

MyList<String> list = new MyList<>();
for(String s : list)
    System.out.println(s);

有没有办法让我的数据类型被识别为一个数组,所以我可以将它弹出到for循环中?我是否扩展了一些课程?我宁愿不扩展一个预制类,如ArrayList或List,但也许还有其他一些类,如Comparable&lt; T&gt;

谢谢。

2 个答案:

答案 0 :(得分:14)

  

有没有办法让我的数据类型被识别为数组,所以我可以将它弹出到for循环中?

是的,您可以通过实施Iterable interface

来实现
class MyList<T> implements Iterable<T> {

    Object[] arr;
    int size;

    public MyList() {
        arr = new Object[10];
    }
    public void add(T value) {
        arr[size++] = value;
    }

    @Override
    public Iterator<T> iterator() {
        Iterator<T> iterator = new Iterator<T>() {
            private int index = 0;

            @Override
            public boolean hasNext() {
                return index < size;
            }

            @Override
            public T next() {
                return (T)arr[index++];
            }

            @Override
            public void remove() {

            }
        };

        return iterator;
    }
}

class Main {

    public static void main(String[] args) {

        MyList<String> myList = new MyList<String>();
        myList.add("abc");
        myList.add("AA");

        for (String str: myList) {
            System.out.println(str);
        }
    }
}

答案 1 :(得分:1)

如果您实施Iterable,您将获得所需的行为。

class MyList<T> implements Iterable<T> {
    // your code
}