[英]How to programmatically test if assertions are enabled?
OCP Java SE 6 程序員練習考試的正確答案之一是:
您可以在不拋出
AssertionError
的情況下以編程方式測試是否已啟用斷言。
我怎樣才能做到這一點?
我用這個
boolean assertOn = false;
// *assigns* true if assertions are on.
assert assertOn = true;
我不確定這是“官方”方式。
我想你應該使用Class.desiredAssertionStatus()
http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#desiredAssertionStatus()
Oracle Java 教程提供了有關如何執行此操作的信息...
http://docs.oracle.com/javase/7/docs/technotes/guides/language/assert.html
教程摘錄
7. 為什么不提供一個構造來查詢包含類的斷言狀態?
這種結構會鼓勵人們內聯復雜的斷言代碼,我們認為這是一件壞事。 此外,如果您覺得必須,可以直接查詢當前 API 上的斷言狀態:
boolean assertsEnabled = false; assert assertsEnabled = true; // Intentional side-effect!!! // Now assertsEnabled is set to the correct value
RuntimeMXBean mx = ManagementFactory.getRuntimeMXBean();
boolean assertionsEnabled = mx.getInputArguments().contains("-ea");
package io.github.baijifeilong.tmp;
import io.vavr.control.Try;
/**
* Created by BaiJiFeiLong@gmail.com at 2019-04-18 09:12
*/
public class TmpApp {
public static void main(String[] args) {
Try.run(() -> {
assert false;
}).onSuccess($ -> {
throw new RuntimeException("Assertion is not enabled");
});
}
}
也許幫助某人。
我正在使用 jdk.nashorn.internal 中的 AssertsEnabled。
System.out.println(AssertsEnabled.assertsEnabled());
// "assertsEnabled()" returns boolean value
也許它可以幫助某人。
boolean ea=false;
try { assert(false); }
catch(AssertionError e) { ea=true; }
官方解決方案*:
資料來源: http://hg.openjdk.java.net/javadoc-next/api/nashorn/rev/fa79d912da1b#l1.38
* 官方的:
正如@Hurkan Dogan 在此處提到的,nashorn package 中有一個AssertsEnabled.assertsEnabled()
api,現在已棄用。 但是,它的實施可以被視為官方解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.