2012-10-23 11 views

risposta

23

Io uso questo

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

Non sono sicuro che questo è il modo "ufficiale".

+0

Ciò causerebbe comunque un AssertionError, giusto? – Thilo

+4

Ogni volta che 'true' è' false';) –

+1

Ah, leggi '=' come '=='. Io vedo. Intelligente. – Thilo

18

Credo che si dovrebbe usare Class.desiredAssertionStatus()

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

+1

questa è la risposta corretta – bestsss

+1

questo modo si evita la possibile avvertimento "assegnazione accidentale" che viene con l'altro approccio. –

+2

In realtà, da javadoc: "Si noti che questo metodo non è garantito per restituire lo stato di asserzione effettivo che era (o sarà) associato alla classe specificata quando era (o sarà) inizializzato.". Quindi questa risposta mi sembra sbagliata, e dovresti considerare la risposta di Joe. – FBB

14

Java Tutorial Oracle fornisce informazioni su come farlo ...

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

Un estratto dal tutorial

7. Perché non fornire un costrutto per interrogare lo stato assert della classe contenente?

Un tale costrutto incoraggerebbe le persone a incorporare il codice di asserzione complessa , che consideriamo come una cosa negativa. Inoltre, è semplice da interrogazione sullo stato assert in cima alla API di corrente, se si sente è necessario:

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");