significado significa que aseverar aseveracion java configuration assertions

java - significa - ¿Cómo habilitar programáticamente aseverar?



aseverar significado (4)

¿Cómo puedo habilitar aseverar mediante programación para clases particulares, en lugar de especificar el parámetro de línea de comando "-ea"?

public class TestAssert { private static final int foo[] = new int[]{4,5,67}; public static void main(String []args) { assert foo.length == 10; } }


Este fue un comentario a la buena respuesta de @Bala, pero se hizo demasiado largo.

Si solo habilita las aserciones, llame a su clase principal: se cargará su clase principal antes de que se habiliten las aserciones, por lo que probablemente necesitará un cargador que no haga referencia a ninguna otra cosa en su código directamente. Puede establecer las aserciones y luego cargar el resto del código a través de la reflexión.

Si las aserciones no están habilitadas cuando se carga la clase, entonces deberían "Compilarse de inmediato" para que no pueda activarlas y desactivarlas. Si quieres alternarlas, entonces no quieres en absoluto afirmaciones.

Debido a la compilación en tiempo de ejecución, algo como esto:

public myAssertNotNull(Object o) { if(checkArguments) if(o == null) throw new IllegalArgumentException("Assertion Failed"); }

Debería funcionar casi tan rápido como las aserciones, ya que si el código se ejecuta mucho y checkArguments es falso y no cambia, toda la llamada al método podría compilarse en tiempo de ejecución, lo que tendrá el mismo efecto básico que una aserción (este rendimiento depende de la máquina virtual).


La forma más simple y mejor puede ser:

public static void assertion(boolean condition,String conditionFailureMessage) { if(!b) throw new AssertionError(conditionFailureMessage); }

No hay necesidad de establecer -ea como argumento de VM.

llamar a la función como:

assertion(sum>=n,"sum cannot be less than n");

Si la afirmación falla, el código le dará a AssertionError, de lo contrario, el código se ejecutará de manera segura.



Tratar

ClassLoader loader = getClass().getClassLoader(); setDefaultAssertionStatus(true);

o

ClassLoader.getSystemClassLoader().setDefaultAssertionStatus(true);

EDITAR:

basado en los comentarios

ClassLoader loader = ClassLoader.getSystemClassLoader(); loader.setDefaultAssertionStatus(true); Class<?> c = loader.loadClass("MyClass"); MyClass myObj = (MyClass) c.newInstance(); public class MyClass { private static final int foo[] = new int[]{4,5,67}; MyClass() { assert foo.length == 10; } }