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());
}
}
}为什么输出OOP?有一个这样的贴子不过我看不懂,还有
return new AbstractIterator<Character>() { private int cursor = 0; protected Character nextElement() {
return cursor == s.length() ? null : s.charAt(cursor++);
}
};
这个局部类是什么意思啊,这个类的构造器在哪。
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());
}
}
}为什么输出OOP?有一个这样的贴子不过我看不懂,还有
return new AbstractIterator<Character>() { private int cursor = 0; protected Character nextElement() {
return cursor == s.length() ? null : s.charAt(cursor++);
}
};
这个局部类是什么意思啊,这个类的构造器在哪。
?是一个接口的话就实现了该接口。
return cursor == s.length() ? null : s.charAt(cursor++);
}
};
内部类就是new构造的啊
OOPS是因为类的初经顺序和多态造成的。子类在初始化的时候会先初始化父类,
在初始化T next = nextElement(); 这句的时候,因为private int cursor = 0;还没有初始化,默认为0,所以nextElement()就为"o" cursor变为1,接着初始化子类private int cursor = 0,这句初始化后cursor 又变为0导致读了两次"o"