8

パブリック関数の引数を常にチェックし、何か問題がある場合は例外をスローします。(プライベート ヘルパーの場合は、アサーションを使用します)。

このような:

if( a < 0 || a >= b )
    throw new IllegalArgumentException("'a' must be greater or equal to 0 and 
        smaller than b ");

しかし、これらのエラーメッセージを書くのはいつも私を悩ませます. メッセージはステートメントの否定にすぎないため、メッセージは冗長に思えます

a < 0 || a >= b

.

また、(Eclipse で) リファクタリングを使用して変数の名前を変更すると、メッセージに変更が反映されないこともよくあります。または、条件を変更して、メッセージを変更するのを忘れています。

次のようなものを書くことができれば、それは素晴らしいことです:

assertArgument(a >= 0 && a < b);

これにより、次のようなメッセージで IllegalArgumentException が発生するはずです。

"violated argument assertion: a >= 0 && a < b."

C では、マクロを記述できます (実際、C では assert は単なるマクロです)。Javaでこのようなことをする簡単な方法はありますか?

4

1 に答える 1

2

C 言語ではマクロを使用してこれを行うことはできませんが、cpp (C プリプロセッサ) では使用できます:-) 本当にそうしたい場合は、Java ソースがコンパイルされる前に cpp を実行することを制限するものは何もありません。#lineこれにより、cpp スタイルのマクロを使用できるようになります ( cp 出力から で始まる行を削除する必要がある場合があります)。

例外で条件を再現するには、あまりにも多くの実装の詳細を含む IMHO です。例外メッセージがコントラクトの違反を記述している場合 (たとえば、「親オブジェクトが指定されていません」、「金額を負にすることはできません」)、条件が変わるたびに例外メッセージを変更する必要はありません。

于 2010-07-25T20:27:46.607 に答える