Java で例外を作成、スロー、およびキャッチすることによるパフォーマンス コストはありますか?
「例外駆動型開発」をより大きなプロジェクトに追加する予定です。独自の例外を設計してメソッドに組み込み、開発者がキャッチして適切な作業を行うように強制したいと考えています。
たとえば、名前に基づいてデータベースからユーザーを取得するメソッドがあるとします。
public User getUser(String name);
ただし、ユーザーが null である可能性があり、ユーザーの public メソッドを使用する前にこれを確認するのを忘れがちです。
User user = getUser("adam");
int age = user.getAge();
その結果、NullPointerException とクラッシュが発生します。ただし、チェックを行った場合、ユーザーオブジェクトを返す前に、null の場合は「UserIsNullException」をスローします。
public User getUser(String name) throws UserIsNullException;
私は実装者に考えて行動するように強制します:
try {
User user = getUser("adam");
int age = user.getAge();
}catch( UserIsNullException e) {
}
これにより、予期しないクラッシュに対してコードがより安全になり、より多くのバグが排除されます。Web サイトに 1 時間あたり数百人の訪問者がいて、このデザイン パターンがほぼどこでも使用されているとします。
このような設計アプローチはパフォーマンスにどのように影響しますか? メリットがコストを上回っているのか、それとも単純に悪いコーディングなのか?
助けてくれてありがとう!
アップデート!明確にするために、私の注意は、私の例が示唆するように、NullPointerException をラップすることではありません。目標は、実装者に try/catch を書くように強制することです。これにより、次の理由から、実際のクラッシュの頭痛の種を節約できます。
ユーザー == null
忘れられました。問題は、これら 2 つの設計モデルの比較に関するものです。
int age;
try {
User user = getUser("adam");
age = user.getAge();
}catch( UserIsNullException e) {
age = 0;
}
対:
int age;
User user = getUser("adam");
if( user != null ) {
age = user.getAge();
} else {
age = 0;
}