Компиляция без утверждений

Я знаю, что утверждения могут быть включены/выключены во время выполнения для отладки и производства соответственно. Однако я обнаружил, что утверждения также увеличивают размер сгенерированного двоичного файла (около 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);
        }
    }
}

РЕДАКТИРОВАТЬ: На самом деле мне кажется, что это включение/отключение является более полезной функцией времени компиляции, чем время выполнения. Я имею в виду, сколько конечных пользователей включит их? Что касается программиста в процессе отладки, то он, скорее всего, все равно будет перекомпилировать код.

13
задан tskuzzy 6 June 2012 в 16:16
поделиться