Java >> Java チュートリアル >  >> Tag >> assert

Java アサーションの使用

1.はじめに

Java アサート キーワードを使用すると、開発者はプログラムの特定の仮定や状態をすばやく確認できます。

この記事では、Java assert の使用方法を見ていきます キーワード。

2. Java アサーションの歴史

Java アサート キーワードは Java 1.4 で導入されたため、かなり前から存在しています。ただし、ボイラープレートを大幅に減らしてコードを読みやすくする、あまり知られていないキーワードのままです。

たとえば、コード内で、アプリケーションの正常な動作を妨げる可能性のある特定の条件を検証する必要があることがよくあります。通常、次のように記述します:

Connection conn = getConnection();
if(conn == null) {
    throw new RuntimeException("Connection is null");
}

アサーションを使用して if を削除できます そして投げる 単一の assert を含むステートメント

3. Java アサーションの有効化

Java アサーションは assert を使用するため キーワード、必要なライブラリやインポートするパッケージはありません。

Java 1.4 より前では、変数やメソッドなどの名前付けに「アサート」という言葉を使用することは完全に合法であったことに注意してください。これにより、新しい JVM バージョンで古いコードを使用すると、名前付けの衝突が発生する可能性があります。

したがって、下位互換性のために、JVM はデフォルトでアサーション検証を無効にします。 . -enableassertions のいずれかを使用して明示的に有効にする必要があります コマンドライン引数、またはその短縮形 -ea:

java -ea com.baeldung.assertion.Assertion

この例では、すべてのクラスに対してアサーションを有効にしています。

特定のパッケージとクラスのアサーションを有効にすることもできます:

java -ea:com.baeldung.assertion... com.baeldung.assertion.Assertion

ここでは、com.baeldung.assertion 内のすべてのクラスに対してアサーションを有効にしています。 パッケージ。

同様に、-disableassertions を使用して、特定のパッケージやクラスに対して無効にすることができます コマンドライン引数、またはその省略形 -da .これら 4 つの引数をすべて一緒に使用することもできます。

4. Java アサーションの使用

アサーションを追加するには、assert を使用するだけです キーワードに boolean を指定します 状態 :

public void setup() {
    Connection conn = getConnection();
    assert conn != null;
}

Java は、文字列を取るアサーションの 2 番目の構文も提供します。これは、AssertionError を構築するために使用されます。 1 つがスローされた場合:

public void setup() {
    Connection conn = getConnection();
    assert conn != null : "Connection is null";
}

どちらの場合も、コードは、外部リソースへの接続が null 以外の値を返すことを確認しています。その値がnullの場合、 JVM は 自動的に AssertionError をスローします .

2 番目のケースでは、スタック トレースに表示される追加の詳細が例外に含まれ、問題のデバッグに役立ちます。

アサーションを有効にしてクラスを実行した結果を見てみましょう:

Exception in thread "main" java.lang.AssertionError: Connection is null
        at com.baeldung.assertion.Assertion.setup(Assertion.java:15)
        at com.baeldung.assertion.Assertion.main(Assertion.java:10)

5. AssertionError の処理

クラス AssertionError 拡張 エラー 、それ自体が Throwable を拡張します .これは、AssertionError であることを意味します はチェックされない例外です。

したがって、アサーションを使用するメソッドはそれらを宣言する必要がなく、さらにコードを呼び出してそれらをキャッチしようとしないでください。

アサーション エラー 回復不能な状態を示すためのものです したがって、それらを処理したり、回復を試みたりしないでください。

6.ベスト プラクティス

アサーションについて覚えておくべき最も重要なことは、アサーションは無効にできるということです。そのため、アサーションが実行されると想定しない .

したがって、アサーションを使用するときは、次の点に注意してください:

  • null 値と空の Optionals を常にチェックする 必要に応じて
  • アサーションを使用してパブリック メソッドへの入力をチェックするのを避け、代わりに IllegalArgumentException などの未チェックの例外を使用します。 または NullPointerException
  • アサーション条件でメソッドを呼び出さず、代わりにメソッドの結果をローカル変数に代入し、その変数を assert で使用します
  • アサーションは、default など、決して実行されないコード内の場所に最適です。 スイッチの場合 ステートメントまたは終了しないループの後

7.結論

Java アサート キーワードは長年にわたって利用可能でしたが、言語のあまり知られていない機能のままです。多くのボイラープレート コードを削除し、コードを読みやすくし、プログラム開発の早い段階でバグを特定するのに役立ちます。

アサーションはデフォルトでは有効になっていないことに注意してください。したがって、コードで使用されたときにアサーションが実行されると想定しないでください。

いつものように、完全なソース コードは GitHub で入手できます。


Java タグ