1前書き

Javaの

assert

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

この記事では、** Javaの

assert

キーワードの使用方法について説明します。


2 Javaアサーションの歴史

Javaの

assert

キーワードはJava 1.4で導入されたので、かなり前から出回っています。ただし、定型句を大幅に減らしてコードを読みやすくするための、あまり知られていないキーワードが残っています。

たとえば、私たちのコードでは、アプリケーションが正しく動作しなくなる可能性がある特定の条件を検証する必要があることがよくあります。

通常、私たちはこのようなものを書くでしょう:

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

アサーションを使用すると、単一の

assert

ステートメントで

if



throw

ステートメントを削除できます。


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

Javaアサーションは

assert

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

Java 1.4より前のバージョンでは、変数、メソッドなどの命名に「assert」という言葉を使用することは完全に正当であったことに注意してください。

したがって、下位互換性のために、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

conditionを指定します。

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

Javaは文字列をとるアサーションのための2番目の構文も提供します。

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

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

nullの場合、JVMは自動的に

AssertionError__ ** をスローします。

後者の場合、例外にはスタックトレースに表示される追加の詳細情報が含まれ、問題のデバッグに役立ちます。

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

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

クラスは

Error

を拡張し、それ自体が

Throwable

を拡張します。これは、

AssertionError

が未チェックの例外であることを意味します。

したがって、アサーションを使用するメソッドは、それらを宣言する必要はなく、さらに呼び出しコードはそれらを試みてキャッチするべきではありません。


  • AssertionErrors

    は、アプリケーション内で回復不可能な状態を示すことを目的としています。


6. ベストプラクティス

アサーションについて覚えておくべき最も重要なことは、それらが無効にされる可能性があるということです。

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

  • null値をチェックし、適切な場合は空の

    Optionals

  • パブリックメソッドへの入力をチェックするためにアサーションを使用しない

代わりに

IllegalArgumentException

などのチェック済み例外を使用するか、

NullPointerException

** アサーション条件でメソッドを呼び出さずに、

メソッドの結果をローカル変数に変換し、その変数を

アサート

** アサーションは、コード内で絶対にならない場所に最適です。


switch

ステートメントの

default

case、または決して終了しないループの後など、実行されます。


7. 結論

Javaの

assert

キーワードは長年使用されてきましたが、言語の機能としてはあまり知られていません。多くの定型コードを削除し、コードを読みやすくし、プログラム開発の早い段階でバグを識別するのに役立ちます。

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

いつものように、完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/core-java-lang[over on GitHub]から入手できます。