1

以前はコードに java1.4 のアサーション構造を挿入していましたが、挿入されたアサーションをデバッグ時に有効にし、コンパイル時に無効にできるため、非常に実用的であることがわかりました。

私の質問は 、グアバのライブラリで最新の Preconditions.checkArgument(..) などに同じことを行うことができるかどうかです。
これは知っておくことが重要です。コードには guava の事前条件チェックがたくさんあるかもしれませんが、それらのほとんどはデバッグ目的のためのものであり、そのような事前条件の数が急速に増えるとパフォーマンスに影響を与える可能性があります。

ありがとうございます。

4

3 に答える 3

8

いいえ、ありません。高速で運転しているときに本当にシートベルトを外したい場合は、assert代わりに使用してください。

私の経験では、ほとんどの前提条件は非常に安価であり、実際の生活でパフォーマンスに大きな影響を与える可能性はほとんどありません。(予期しない不良データがシステムに入り込み、他のすべてが台無しになるまで検出されない場合の影響は非常に大きくなる可能性があります...)

于 2013-02-20T09:30:07.417 に答える
0

https://github.com/cowwoc/requirements.java/を見てください(私は著者です)。アサーションが無効になっている場合、まさにあなたが求めていることを達成します(コードはJITによって最適化されます):

assertThat(name, value).isGreaterThan(5);

ドキュメントの下部に特定のパフォーマンス数値を示します。

于 2016-10-07T16:34:06.627 に答える
0

代わりに、valid4j を hamcrest-matchers と共に使用できます (Maven Central で org.valid4j:valid4j として見つかります)。お勧めしませんが、valid4j はオフにすることができます。

システム プロパティ: -Dorg.valid4j.AssertiveProvider=disabled

または、サービス ローダーを使用して、ファイル /META-INF/services/org.valid4j.AssertiveProvider に行 org.valid4j.impl.AssertiveDisabledProvider を追加します。

リンク:

于 2014-12-12T18:43:47.580 に答える