タイトルで説明されているように、私はいくつかのデータに対して反復子を設計しようとしていますが、これはどこかで失敗する可能性があります。例としては、DB から次の行Iterator<DatabaseObject>
を読み込んで続行する呼び出しが行われる場合があります。next()
他の例には、例外を発生させる API からのオブジェクトを使用したデータの処理が含まれる場合があります。Iterator は例外を発生させることが許可されていないため、問題はこのシナリオでどのように応答するかです...NoSUchElementException
そこで意味のあるメッセージをスローして提供する必要がありますか?
3 に答える
5
未チェックの例外をスローできます。をスローするのは理にかなっていNoSuchElementException
ます。実際には、エラーが原因でそのような要素が存在できなかったからです。
例外が根底にある例外をラップするといいでしょう。残念ながら、NoSuchElementException
別の例外を受け取るコンストラクターはありません。したがって、根本的な原因を広めたい場合は、次のような別のルートに進む必要がありますRuntimeException
。
try {
...
} catch (<some exception type> e) {
throw new RuntimeException("Next element not accessible", e);
}
または、予約済みの値 ( などnull
) を返すこともできます。
于 2012-11-26T18:07:55.683 に答える
0
エラーをどのように処理したいかによって異なります。問題が発生したときに false を返すことができるように、すでに hasNext() にある次のエントリを読みたいと思うかもしれません。お客様目線で考えてみてください。クライアントはどのように反応するべきですか?
于 2012-11-26T18:09:50.147 に答える
0
「失敗する可能性のあるイテレータ」を作成しようとしている API のほとんどは、実際には非常にうまく動作しません。これにはを使用しないことを強くお勧めします。Iterator
于 2012-11-26T18:26:19.383 に答える