【问题标题】:Creating my own enhanced for loop创建我自己的增强 for 循环
【发布时间】:2014-02-22 06:47:57
【问题描述】:

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

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

谢谢。

【问题讨论】:

    标签: java generics for-loop


    【解决方案1】:

    有没有办法让我的数据类型被识别为一个数组,这样我就可以把它弹出到一个 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);
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-23
        • 2011-01-20
        • 1970-01-01
        • 1970-01-01
        • 2012-08-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多