2012-10-23 33 views

Trả lời

23

tôi sử dụng này

boolean assertOn = false; 
// *assigns* true if assertions are on. 
assert assertOn = true; 

Tôi không chắc chắn đây là "chính thức" cách.

+0

Điều đó sẽ ném một AssertionError, mặc dù, phải không? – Thilo

+4

Mỗi lần 'true' là' false';) –

+1

Ah, đọc '=' là '=='. Tôi hiểu rồi. Tài giỏi. – Thilo

18

Tôi đoán bạn nên sử dụng Class.desiredAssertionStatus()

http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#desiredAssertionStatus()

+1

đây là câu trả lời đúng – bestsss

+1

Điều này tránh sự "tình cờ chuyển nhượng" có thể cảnh báo mà đến với cách tiếp cận khác. –

+2

Trên thực tế, từ javadoc: "Lưu ý rằng phương thức này không được bảo đảm trả lại trạng thái khẳng định thực tế (hoặc sẽ được) kết hợp với lớp được chỉ định khi nó được (hoặc sẽ được) khởi tạo.". Vì vậy, câu trả lời này có vẻ không chính xác với tôi, và bạn nên xem xét câu trả lời của Joe. – FBB

14

Các Oracle Java Tutorial cung cấp thông tin về làm thế nào để làm điều đó ...

http://docs.oracle.com/javase/7/docs/technotes/guides/language/assert.html

Một đoạn trích từ hướng dẫn

7. Tại sao không cung cấp một cấu trúc để truy vấn tình trạng assert của lớp có chứa?

Cấu trúc như vậy sẽ khuyến khích mọi người đưa ra xác nhận phức tạp nội tuyến mã mà chúng tôi coi là điều xấu. Hơn nữa, nó là đơn giản để truy vấn tình trạng khẳng định trên đỉnh API hiện tại, nếu bạn cảm thấy bạn phải:

boolean assertsEnabled = false; 
assert assertsEnabled = true; // Intentional side-effect!!! 
// Now assertsEnabled is set to the correct value 
0
RuntimeMXBean mx = ManagementFactory.getRuntimeMXBean(); 
boolean assertionsEnabled = mx.getInputArguments().contains("-ea");