Это был комментарий к хорошему ответу @ bala, но он был слишком длинным.
Если вы просто активируете утверждения, тогда вызовите свой основной класс - ваш главный класс будет загружен до того, как утверждения будут включены, поэтому вы сможетевероятно, нужен загрузчик, который не ссылается ни на что другое в вашем коде напрямую.Он может установить утверждения и затем загрузить остальную часть кода с помощью отражения.
Если утверждения не включены при загрузке класса, они должны быть немедленно "скомпилированы", чтобы вы не могли включать и выключать их.Если вы хотите их переключать, тогда вам вообще не нужны утверждения.
Из-за компиляции во время выполнения, что-то вроде этого:
public myAssertNotNull(Object o) {
if(checkArguments)
if(o == null)
throw new IllegalArgumentException("Assertion Failed");
}
Должно работать почти так же быстро, как утверждения, потому что есликод выполняется много, а checkArguments имеет значение false и не изменяется, тогда весь вызов метода может быть скомпилирован во время выполнения, что будет иметь тот же базовый эффект, что и утверждение (эта производительность зависит от виртуальной машины).