Javaで例外リファクタリングをスローします

sau123:

からコードを変更しています

Implementation 1 : 
public User getUser(String userid) {
    User user;
    try {
        // some code to get User

    }catch(InterruptedException e) {
        throw new CustomException();
    }

    return user;
}

Implementation 2 : 
public User getUser(String userid) {
    User user;

    try {
        // some code to get User

    }catch(InterruptedException e) {
        SomeHandlerInProject.throwCustomErr();
    }

    return user;
}


class SomeHandlerInProject {
    public static void throwCustomErr() {
        throw new CustomException();
    }
}

実装2は、ユーザーが初期化されていない可能性があるというコンパイルエラーを表示します。誰かが私がここで欠落しているものを助けることができますが、私には非常に奇妙に見えます。

アンドレアス:

コンパイラーはSomeHandlerInProject.throwCustomErr()常に例外をスローすることを認識していないため、コンパイラーのコード分析が行われる限り、メソッドは正常に戻る可能性があります。

もしそうなら、その価値は何でしょうuserか?それは値を持たないので、コンパイラーはそれについて、必要に応じて文句を言います。メソッドでSomeHandlerInProjectクラスを再コンパイルせずに、例外をスローしないようにクラスを変更できるgetUser()ため、コンパイラはそれについて不満を言うのが正しいことに注意してください。

にもかかわらず、あなたはメソッドは常に例外をスロー知っている、あなたはまだそれがないと、もしあなたが値を割り当てる必要がありますので、コードを記述する必要がありuser、それを初期化することにより、または、それに割り当てることにより、いずれか、catchブロック。

例外を構築するために必要なロジックを共有することが目的である場合は、ヘルパーメソッドをreturn例外ではなく、例外にして、呼び出し元にを実行させる必要がありthrowます。そうすればコンパイラは文句を言わないでしょう:

public User getUser(String userid) {
    User user;
    try {
        // some code to get User
    } catch (InterruptedException e) {
        throw SomeHandlerInProject.buildCustomErr();
    }
    return user;
}

class SomeHandlerInProject {
    public static CustomException buildCustomErr() {
        return new CustomException();
    }
}

スタックトレースは、コールスタックのスナップショットが作成されるコンストラクターの場所であるため、同じままです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

HTTPステータス500-リクエストの処理に失敗しました。ネストされた例外は、サービスクラスをリファクタリングした後のjava.lang.NullPointerExceptionです

分類Dev

Chromeデバッガー:コンソールで例外リンクをクリックすると、ソースファイルにクロスリンクする代わりに、新しいタブでファイルが開きます

分類Dev

空でない場合、スプリングレクターは例外をスローします

分類Dev

MockitoのUnnecessaryStubbingExceptionをスローしないようにコードをリファクタリングします

分類Dev

ファクトリスロー例外を使用してインスタンス化

分類Dev

Ruby onRailsコントローラーで重複するレスキュー例外ハンドラーをリファクタリングする

分類Dev

Gradleタスク「type:Copy」で重複したコードをリファクタリングします

分類Dev

Android Java-try-catchをリファクタリングする方法-finallyをスローインして、すべて抽象クラス内で?

分類Dev

スプリングブートでエラーファクトリメソッド 'halLinkDisocoverer'が例外をスローしたのはなぜですか?

分類Dev

Twitterファブリックでカスタムログインボタンを使用していますか?

分類Dev

ファンクター/関数型プログラミングを使用して、Java 7でリストをグループ化できますか(グループごとにその要素をカウントできますか)?

分類Dev

Java Stream-フィルターで例外をスローし、リストを返します

分類Dev

F#をポイントフリースタイルにリファクタリングできますか?

分類Dev

データベースのクエリでは、tempdbファイルまたはデータベースログファイルを使用しますか?

分類Dev

CPUプロファイリングのフィルタリングクラスはJava VisualVMで機能しますか?

分類Dev

Vanilla JSは、スクロールリファクタリング時にリンクのアクティブ状態を変更します

分類Dev

ローカル変数をフィールドにリファクタリングしますか?

分類Dev

Dartでマップオブジェクトのリストをリファクタリングしますか?

分類Dev

Java8ストリームでループと条件をリファクタリングする

分類Dev

別のパッケージのJavaインターフェースをコードからリファクタリングできますか?

分類Dev

デバッグではプロジェクトリファレンスを使用し、リリースではNugetを使用します

分類Dev

各Zf2コントローラーアクションでいくつかの呼び出しをリファクタリングします

分類Dev

ifステートメントをリファクタリングして冗長性を削除します

分類Dev

例外がスローされ、ASP.NET Web API C# で Regex を使用して IEnumerable コレクションをフィルタリングする

分類Dev

クロスフィルターでグループ内をフィルタリングできますか

分類Dev

次のステップでアプリをリファクタリングしますか?

分類Dev

TextBoxの検索可能なロングリストセレクターは、Windows Phone8でメモリ不足の例外を示していますか?

分類Dev

agグリッドでカスタムフローティングフィルターを使用してファイリングできません

分類Dev

文字列の連結をリファクタリングしてPyCharmでフォーマットします

Related 関連記事

  1. 1

    HTTPステータス500-リクエストの処理に失敗しました。ネストされた例外は、サービスクラスをリファクタリングした後のjava.lang.NullPointerExceptionです

  2. 2

    Chromeデバッガー:コンソールで例外リンクをクリックすると、ソースファイルにクロスリンクする代わりに、新しいタブでファイルが開きます

  3. 3

    空でない場合、スプリングレクターは例外をスローします

  4. 4

    MockitoのUnnecessaryStubbingExceptionをスローしないようにコードをリファクタリングします

  5. 5

    ファクトリスロー例外を使用してインスタンス化

  6. 6

    Ruby onRailsコントローラーで重複するレスキュー例外ハンドラーをリファクタリングする

  7. 7

    Gradleタスク「type:Copy」で重複したコードをリファクタリングします

  8. 8

    Android Java-try-catchをリファクタリングする方法-finallyをスローインして、すべて抽象クラス内で?

  9. 9

    スプリングブートでエラーファクトリメソッド 'halLinkDisocoverer'が例外をスローしたのはなぜですか?

  10. 10

    Twitterファブリックでカスタムログインボタンを使用していますか?

  11. 11

    ファンクター/関数型プログラミングを使用して、Java 7でリストをグループ化できますか(グループごとにその要素をカウントできますか)?

  12. 12

    Java Stream-フィルターで例外をスローし、リストを返します

  13. 13

    F#をポイントフリースタイルにリファクタリングできますか?

  14. 14

    データベースのクエリでは、tempdbファイルまたはデータベースログファイルを使用しますか?

  15. 15

    CPUプロファイリングのフィルタリングクラスはJava VisualVMで機能しますか?

  16. 16

    Vanilla JSは、スクロールリファクタリング時にリンクのアクティブ状態を変更します

  17. 17

    ローカル変数をフィールドにリファクタリングしますか?

  18. 18

    Dartでマップオブジェクトのリストをリファクタリングしますか?

  19. 19

    Java8ストリームでループと条件をリファクタリングする

  20. 20

    別のパッケージのJavaインターフェースをコードからリファクタリングできますか?

  21. 21

    デバッグではプロジェクトリファレンスを使用し、リリースではNugetを使用します

  22. 22

    各Zf2コントローラーアクションでいくつかの呼び出しをリファクタリングします

  23. 23

    ifステートメントをリファクタリングして冗長性を削除します

  24. 24

    例外がスローされ、ASP.NET Web API C# で Regex を使用して IEnumerable コレクションをフィルタリングする

  25. 25

    クロスフィルターでグループ内をフィルタリングできますか

  26. 26

    次のステップでアプリをリファクタリングしますか?

  27. 27

    TextBoxの検索可能なロングリストセレクターは、Windows Phone8でメモリ不足の例外を示していますか?

  28. 28

    agグリッドでカスタムフローティングフィルターを使用してファイリングできません

  29. 29

    文字列の連結をリファクタリングしてPyCharmでフォーマットします

ホットタグ

アーカイブ