所以我试着实现一个简单的生成器。
在Python中,如果我想编写一个生成器,我会做这样的事情:
def a_generator():
yield 1
# paused, do some logic next call
yield 'DONE'
我用Java创建了一个生成器类
public abstract class Generator implements Iterable<Object> {
private ArrayList<Object> yields = new ArrayList<>();
public Generator() {
run();
}
public void yield(Object element) {
yields.add(element);
}
public Object next() {
return yields.remove(0);
}
public abstract void run();
@Override
public Iterator<Object> iterator() {
return yields.iterator();
}
}
它可以产生任何类型的数据,而不仅仅是一个
所以现在我可以像这样使用它:
Generator gen = new Generator() {
@Override
public void run() {
yield(1);
yield("DONE");
}
}
我可以使用增强的forloop或一次调用next来获得一个结果
但问题是:如果我这样做(如果我必须暂停代码执行)
Generator generator = new Generator() {
@Override
public void run() {
System.out.println(3);
yield(1);
yield("DONE");
System.out.println(2);
}
};
它会打印: 3 2 1 “DONE”
所以可以实现“暂停代码执行”???