Javaでは、(文字の代わりに)オブジェクトをプルReader
することで機能するの抽象バージョンはです。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がリリースされたら、クロージャを使用するだけですが、そのクロージャにはまだインターフェイスが必要です。
最後に、私が以前に選択した他のオプションは、GuavaPredicate
またはFunction
(さらに悪いように見えますが)に完全に違反することです。これらはべき等であることを目的としているため、契約違反です(ただし、true
常に戻ってきた場合は...)。
ただし、Guavaが提供するのは、 AbstractIteratorのおかげでPythonのジェネレーターに類似したものです。
私はGuavaに拡張機能の問題を追加しましたが、そのような基本的なものを追加するのは実際には彼らの仕事ではないことに同意します。