Ответ 1
В Java нет предпроцессорных директив. Ваш лучший выбор - комментировать код.
Мне интересно, есть ли Java-эквивалент для C
#if 0
... Some Code ...
#endif
Что можно использовать вокруг кодовых блоков, которые мы не хотим компилировать. Добавление кавычек блоков:
/*
... Some Code ...
*/
также имеет тот же эффект, но проблема в том, что мы должны гарантировать, что комментариев нет.
// some comment
в блоке.
В Java нет предпроцессорных директив. Ваш лучший выбор - комментировать код.
static final
могут использоваться для условной компиляции.
static final boolean DEBUG = false;
if (DEBUG) {
some code ....
}
some code
будет удален компилятором.
Также возможно использовать ключевое слово assert
для включения и отключения некоторой части кода. Используйте java -ea: ..
для управления, если код должен быть включен или отключен. См. http://docs.oracle.com/javase/1.5.0/docs/guide/language/assert.html
Существует несколько решений:
Используйте препроцессор - я думаю, что он будет работать со стандартным CPP. Были некоторые Java-пропроцессоры как jappo и java+, которые вы можете попробовать
Замените #if 0 на true, если:
if (false) { код }
Условие можно уточнить, запросив свойства системы:
if(System.getProperty("NO_COMPILE").equals("true")) {
code
}
Это имеет то преимущество, что его можно легко установить либо из ANT, либо из Eclipse.
EDIT. Пожалуйста, отметьте, что если код действительно будет скомпилирован и представлен в файлах .class. Более того, хотя запрос свойств системы более изящный, выполняется во время выполнения, а не во время компиляции, поэтому не совсем соответствует исходному требованию. Если if (false) находится на втором, лучше.
EDIT2: еще лучшее решение, которое я только что нашел: http://prebop.sourceforge.net/
Я даже не могу себе представить, почему это проблема (как описано), но я подозреваю, что самое простое в том, чтобы сделать grep для//в коде перед его компиляцией (или передать его вашему репозитарию версий), Я не думаю, что что-то в eclipse (если это то, что вы используете), чтобы помочь вам, и я почти уверен, что у java нет встроенного механизма, подобного тому, который вы описываете на C.
Я видел это где-то некоторое время назад:
// /*
class SomeClass{
int withSomeField;
..............
}
// */
И вы можете поместить //
в и, при необходимости, удалить их. Вероятно, это многострочные комментарии, которые могли бы вызвать проблему, если бы они были там.
if (false) работает хорошо для меня (используя Eclipse).
вы можете просто использовать препроцессор Java, и я думаю, что это будет лучше, чем флаги http://code.google.com/p/java-comment-preprocessor/ флаги, конечно, позволяют разрезать и добавлять блоки на этапе компиляции, но препроцессор позволяет сделать процесс более гибким.
Не существует Java-эквивалента директивы препроцессора, используемой на языках C/С++. Во всяком случае, вы можете сделать что-то подобное с помощью аннотаций или ANT, как это кратко описано здесь
Использование аннотаций для добавления C как директив препроцессора
или здесь
Вместо того, чтобы сделать код условным путем предварительной обработки исходного кода (как это делает C), используйте объектно-ориентированное программирование: используйте шаблоны проектирования, такие как стратегия и инъекции зависимостей, чтобы сделать условный код.