Я знаю, что утверждения могут быть включены/выключены во время выполнения для отладки и производства соответственно. Однако я обнаружил, что утверждения также увеличивают размер сгенерированного двоичного файла (около 100-200 байт в приведенном ниже примере).
В C и C++ мы можем сделать это во время компиляции, указав #define NDEBUG
перед #include
.
Есть ли способ для компилятора Java сделать это автоматически? Я хотел бы оставить их в исходном коде для целей отладки позже. Но я также не хочу, чтобы результирующий двоичный файл был больше, чем необходимо (у нас есть ограничение по размеру в качестве требования к дизайну).
Код C:
//#define NDEBUG
#include <assert.h>
int main(void) {
assert(0); // +200 bytes without NDEBUG, 0 with NDEBUG
return 0;
}
Код Java:
public class Test {
public static void main(String[] args) {
assert(System.nanoTime()==0); // increases binary size by about 200 bytes
}
}
В ответ на ответ bn.:
public class Test2 {
public static final boolean assertions = false;
public static void main(String[] args) {
if(assertions) {
assert(System.nanoTime()==0);
}
}
}
РЕДАКТИРОВАТЬ: На самом деле мне кажется, что это включение/отключение является более полезной функцией времени компиляции, чем время выполнения. Я имею в виду, сколько конечных пользователей включит их? Что касается программиста в процессе отладки, то он, скорее всего, все равно будет перекомпилировать код.