2016-10-25 1 views
1

私は、それに付随する情報が増えて例外をスローしようとしています。私はそれを冗長にしてデバッグに役立てたいので、複数行にしました。Java例外メッセージの規則はありますか?

throw new RuntimeException("Something failed.\n" + 
    "Please provide another dependency on this class\n\n" + 
    " MyClass object = new MyClass(depdencyA, dependencyB)"); 

しかし、私はそれを行う必要がありますか?多くの例外のようなものは1ライナーだと思われますが、私はそれほど冗長ではないと感じています。

私はGradleプラグインを作成していますので、別の表記法があるかどうか教えてください。

1つがある場合は、オラクルのような当局からリファレンスまたはドキュメントを表示してください。

+0

この情報が含まれていない私は、広く確立大会のことを聞いたことがありません。プロダクションコードでは、ERR-314546のような一意の識別子を追加して、ユーザーのドキュメントから簡単に参照できるようにし、自動化された処理でより簡単な時間を持つことができます。 –

答えて

1

例外(および例外メッセージ)は、可能な限り具体的かつ簡潔でなければなりません。

問題を特定し、問題の解決方法をユーザー(または管理者)に知らせるために十分な情報を提供する必要があります。

あなたの例では、これらの点で失敗:

  1. RuntimeExceptionは非常に一般的である - より具体的な例外型(おそらくいくつかの既存の例外タイプ、作成したかもしれないいくつかの例外タイプ)
  2. を選択し、「何かに失敗しました。」すべてがOKだった場合は例外をスローしません
  3. "このクラスに別の依存関係を提供してください" - クラスに特定の数の依存関係が必要な場合は、 "5つの依存関係のうち2つだけが提供されました" 。 "No DataSource found"
  4. "MyClassオブジェクト=新しいMyClass(depdencyA、dependencyB)" - この部分は、ユーザー側でいくつかの呼び出しスタイルを想定しています。あなたのコンストラクタ/メソッドが、リフレクションまたはメソッド参照を使用して呼び出された場合はどうなりますか?例外がスローされた正確な場所はまたスタックトレース内に含まれている
  5. - もう一度あなたの例外メッセージに
+0

'InsufficientDependencyException'のような新しいExceptionクラスを作成して私の例外を分類し、 'このクラスに別の依存関係を提供してください 'この場合、カスタムフィールドをこの 'Exception'クラスに追加することもできます。 – Nicholas

+1

@Nicholasは例外のキャッチャーがあなたの特定の例外クラスを知っていて、これらのカスタムフィールドにアクセスできる場合にのみ、 'Exception'クラスにカスタムフィールドを追加することができます。これは、一般に、カスタムフィールドは、自分自身を捕まえる予定の例外にのみ追加する必要があることを意味します。 –

0

一般的な規則はありません。しかし:そのようなRuntimeExceptionを投げる

  1. は一般的に悪い考えです。

  2. 冗長な例外メッセージは、通常のユーザーを対象にしている場合、圧倒的な可能性があります。

  3. 例外メッセージに埋め込まれたマークアップ(改行、タブなど)が賢明に処理されるという保証はありません。 (スタートのために、次のメッセージが表示され、固定幅フォント(さえ)が使用されるかどうかをそのウィンドウの文字幅を予測することはできません。)

  4. 国際化を....

Gradleの場合は、他のプラグインの動作を確認したり、Gradleが複数行の例外メッセージをどのように処理するかを確認する必要があります。


診断のための余分な詳細を提供するに対処するための別の方法は、あなたが例外をスロー前に...詳細をINFOまたはDEBUGイベントをログに記録するアプリケーションのロガーを使用することです。

+0

例外は普通のユーザーには見られません!私はそれが目標です、いつも現実ではありませんが、私は普通のユーザーが見るかもしれないものに応えません。 – TofuBeer

+0

@TofuBeer - そうです。しかしここではGradleプラグインについて話していますが、例外メッセージは診断を行うための標準的な(または唯一の)方法かもしれません。 (そして、あなたは、Gradleのユーザーが通常、例外メッセージを拾うのに十分な "注意点"を持っている開発者であることを願っています)。 –

関連する問題