创建我自己的增强for循环

Ota*_*nan 7 java generics for-loop

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

System.out.println(object); //This implicitly calls the object's toString() method
Run Code Online (Sandbox Code Playgroud)

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

MyList<String> list = new MyList<>();
for(String s : list)
    System.out.println(s);
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

Roh*_*ain 14

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

是的,您可以通过实现Iterable界面来实现:

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)