Я знаю, что утверждения могут быть включены/отключены во время выполнения для отладки и производства, соответственно. Однако я обнаружил, что утверждения также увеличивают размер сгенерированного двоичного файла (около 100-200 байт в примере ниже).
В C и С++ мы можем сделать это во время компиляции, имея #define NDEBUG
до #include <assert.h>
.
Есть ли какой-либо способ для компилятора 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);
}
}
}
EDIT: На самом деле мне кажется, что это включение/отключение является более полезной функцией времени компиляции, чем время выполнения. Я имею в виду, сколько из них будет включать конечных пользователей? Что касается программиста во время процесса отладки, он, вероятно, будет перекомпилировать код в любом случае.