在 Java 中Reader
,用于拉取对象(而不是字符)的 a 的抽象版本是Iterator
.
问题是有一个抽象版本Appendable
或者Writer
我可以在哪里推送对象(即接口)?
过去我只是制作自己的界面,例如:
public interface Pusher<T> {
public void push(T o);
}
是否有在大多数环境中可用的通用接口,有人知道这是有意义的,所以我不必继续创建上述接口?
更新:
这是一个有用的示例:
public void findBadCategories(final Appendable a) {
String q = sql.getSql("product-category-bad");
jdbcTemplate.query(q, new RowCallbackHandler() {
@Override
public void processRow(ResultSet rs) throws SQLException {
String id = rs.getString("product_category_id");
String name = rs.getString("category_name");
if (! categoryMap.containsKey(id)) {
try {
a.append(id + "\t" + name + "\n");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
});
}
我在Appendable
这里使用,但我更愿意有我的Pusher
回调。相信我,一旦Java 8 出来,我只会使用闭包,但闭包仍然需要一个接口。
最后,我之前选择的另一个选项是完全违反 Guava 的Predicate
or Function
(尽管这看起来更糟)。它违反了合同,因为这些目标是幂等的(尽管我想如果你true
一直返回......)。
由于它的AbstractIterator,Guava 确实提供了与 Python 的生成器类似的东西。
我向 Guava 添加了一个增强问题,但我同意他们的观点,即添加这样的基本内容并不是他们的工作。