Esto fue un comentario a la buena respuesta de @bala, pero se hizo demasiado largo.
Si solo habilita las afirmaciones, llame a su clase principal: su clase principal se cargará antes de que se activen las aserciones, por lo que probablemente necesite un cargador que no haga referencia directa a ninguna otra cosa en su código. 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 deben ser "compiladas" inmediatamente para que no pueda activarlas y desactivarlas. Si quiere alternar entre ellos, entonces no quiere aserciones en absoluto.
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 afirmaciones porque si el código se ejecuta mucho y checkArguments es falsa y no cambia entonces toda la llamada al método podría compilarse en el tiempo de ejecución, que tendrá el mismo efecto básico que una aserción (Este rendimiento depende de la máquina virtual).
Como puede ver la imagen "Basado en comentarios", no funciona después de que el comentario se haya marcado como obsoleto, por lo que es mejor documentar el motivo correctamente. ¿Por qué creas una instancia de MyClass a través de la reflexión? –