import java.util.Iterator;
import java.util.NoSuchElementException;public abstract class AbstractIterator<T> implements Iterator<T> { T next = nextElement(); public boolean hasNext() {
return next != null;
} public T next() {
if (next == null) {
throw new NoSuchElementException();
}
T result = next;
next = nextElement();
return result;
} public void remove() {
throw new UnsupportedOperationException();
} protected abstract T nextElement(); private static Iterator<Character> test(final String s) {
return new AbstractIterator<Character>() { private int cursor = 0; protected Character nextElement() {
return cursor == s.length() ? null : s.charAt(cursor++);
}
};
} public static void main(String[] args) {
for (Iterator<Character> i = test("OPS"); i.hasNext();) {
System.out.print(i.next());
}
}
}
其中如下代码
private static Iterator<Character> test(final String s) {
return new AbstractIterator<Character>() { private int cursor = 0; protected Character nextElement() {
return cursor == s.length() ? null : s.charAt(cursor++);
}
};
是如何完成将String s遍历的?Iterator<Character> i = test("OPS"); 怎么就把OOPS赋给了Iterator<Character>?我没看见这个方法有循环体啊,还是由有继承什么的,请指教
import java.util.NoSuchElementException;public abstract class AbstractIterator<T> implements Iterator<T> { T next = nextElement(); public boolean hasNext() {
return next != null;
} public T next() {
if (next == null) {
throw new NoSuchElementException();
}
T result = next;
next = nextElement();
return result;
} public void remove() {
throw new UnsupportedOperationException();
} protected abstract T nextElement(); private static Iterator<Character> test(final String s) {
return new AbstractIterator<Character>() { private int cursor = 0; protected Character nextElement() {
return cursor == s.length() ? null : s.charAt(cursor++);
}
};
} public static void main(String[] args) {
for (Iterator<Character> i = test("OPS"); i.hasNext();) {
System.out.print(i.next());
}
}
}
其中如下代码
private static Iterator<Character> test(final String s) {
return new AbstractIterator<Character>() { private int cursor = 0; protected Character nextElement() {
return cursor == s.length() ? null : s.charAt(cursor++);
}
};
是如何完成将String s遍历的?Iterator<Character> i = test("OPS"); 怎么就把OOPS赋给了Iterator<Character>?我没看见这个方法有循环体啊,还是由有继承什么的,请指教
OOPS 是因为类的初经顺序和多态造成的。 子类在初始化的时候会先初始化父类,
在初始化T next = nextElement(); 这句的时候,因为private int cursor = 0;还没有初始化,默认为0,所以nextElement()就为"o" cursor变为1,接着初始化子类private int cursor = 0,这句初始化后cursor 又变为0导致读了两次"o"如何完成将String s遍历的?这是因为next() 方法啊。。而next()方法又调用了nextElement() ,你也看到它每次返回指针所指示的那个字符。