如果我要在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;
谢谢。
答案 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
}