3

タイトルで説明されているように、私はいくつかのデータに対して反復子を設計しようとしていますが、これはどこかで失敗する可能性があります。例としては、DB から次の行Iterator<DatabaseObject>を読み込んで続行する呼び出しが行われる場合があります。next()他の例には、例外を発生させる API からのオブジェクトを使用したデータの処理が含まれる場合があります。Iterator は例外を発生させることが許可されていないため、問題はこのシナリオでどのように応答するかです...NoSUchElementExceptionそこで意味のあるメッセージをスローして提供する必要がありますか?

4

3 に答える 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 に答える