インターフェースと検査例外の相性

J2SE 5.0 から拡張 for 構文が導入されたので java.sql.ResultSet や java.io.BufferedReader を java.lang.Iterable を実装したクラスでラップしたものができたら1レコードずつ読み込みながら処理とか、1行ずつ読み込みながら処理とかが簡単に書けそうとか思ったりする。で、実際このへんにそんな感じのサンプルがあったりする。
が、java.util.Iterator はかなり汎用的なインターフェースだから、next() や hasNext() で検査例外を送出することができないわけで、当然、検査例外である SQLException も IOException も送出できない。まぁ RuntimeException でラップして投げればいいんだけど、それはそれで検査例外で例外処理を義務付けるという折角のメリットがなくなるわけで。結局、インターフェースによる抽象化と検査例外による例外処理の義務付けがどうしても相性が悪いという話になる。
Generics見たいに検査例外の型をパラメタライズするとかしてなんとかならんかなぁ。ちょっと考えたところでは無理っぽいけど。