CUBは子供の白熊

Java SE 8 実践プログラミングの練習問題を解く

第3章 ラムダ式を使ったプログラミング : 問題 3 : アサーション

問題 3

Java 1.4 は、予約語assertでもって Java 言語にアサーションを追加した。
なぜアサーションは、ライブラリの機能として提供されなかったのか?

解答

当時の Java では遅延実行を実現できなかったため。
メソッド呼び出しにすると、呼び出し時点で条件式を評価せざるを得ない。

さらに問題

Java 8 ではライブラリの機能として実装できるか?

解答

できる

以下がその例である。
ただし、アサーションの有効/無効は、システムプロパティjava.enable.assertionsで切り替えることにしてある。

public static void assert(BooleanSupplier condition) {
    if (Boolean.getBoolean("java.enable.assertions")) {
        if (!condition.getAsBoolean()) {
            throw new AssertionError();
        }
    }
}