多くの場合(ほとんどの場合)、エラーメッセージパラメータなしでcheckArgument()メソッドを使用できます。つまり、エラーメッセージをまったく提供しません。
良いエラーメッセージを作成するには、誰がメッセージを読むかを理解する必要があります。エンドユーザーではありません。前提条件が失敗した場合は、コードのバグを示している可能性があります。テキストは失敗した前提条件を説明しているかもしれませんが、ほとんどの場合、それはエンドユーザーには役に立たず、プログラマーにとってのヒントになるはずです。ほとんどの場合、メッセージ自体もスタックトレースとソースコードなしでは意味がありません。実際、ほとんどの場合、スタックトレースとソースコードは、プログラマーがバグを修正するために必要なものであり、エラーメッセージは役に立ちません。前提条件が明確でない場合は、その横にあるコメントがそれを文書化するのに最適な方法です。
誰もテキストを本当に気にしない場合に常にエラーメッセージを提供する必要があるため、プログラマーは役に立たない、明白で役に立たないメッセージを作成し、コードを読みにくくするだけです。
エラーメッセージが役立つ場合があります。たとえば、メッセージに変数の実際の値が含まれている場合がありますが、経験上、それほど頻繁ではありません。このような場合は、メッセージを使用できます。
同様の議論は、JUnitのassertメソッドにも当てはまります。常にエラーメッセージを提供することは良い考えではありません。
また、エンドユーザー向けのアプリケーションではなくライブラリで前提条件を使用している場合、コードがどのように使用されるかわからないため、状況が異なる場合があります。