Подтвердить что ты не робот

Как пометить код Java таким образом, чтобы он не был скомпилирован

Мне интересно, есть ли Java-эквивалент для C

#if 0
... Some Code ...
#endif

Что можно использовать вокруг кодовых блоков, которые мы не хотим компилировать. Добавление кавычек блоков:

/*
... Some Code ...
*/

также имеет тот же эффект, но проблема в том, что мы должны гарантировать, что комментариев нет.

// some comment

в блоке.

4b9b3361

Ответ 1

В Java нет предпроцессорных директив. Ваш лучший выбор - комментировать код.

Ответ 2

Поля

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

Ответ 3

Существует несколько решений:

  • Используйте препроцессор - я думаю, что он будет работать со стандартным 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/

Ответ 4

Я даже не могу себе представить, почему это проблема (как описано), но я подозреваю, что самое простое в том, чтобы сделать grep для//в коде перед его компиляцией (или передать его вашему репозитарию версий), Я не думаю, что что-то в eclipse (если это то, что вы используете), чтобы помочь вам, и я почти уверен, что у java нет встроенного механизма, подобного тому, который вы описываете на C.

Ответ 5

Я видел это где-то некоторое время назад:

// /*
class SomeClass{
     int withSomeField;
     ..............
}
// */

И вы можете поместить // в и, при необходимости, удалить их. Вероятно, это многострочные комментарии, которые могли бы вызвать проблему, если бы они были там.

Ответ 6

if (false) работает хорошо для меня (используя Eclipse).

Ответ 7

вы можете просто использовать препроцессор Java, и я думаю, что это будет лучше, чем флаги http://code.google.com/p/java-comment-preprocessor/ флаги, конечно, позволяют разрезать и добавлять блоки на этапе компиляции, но препроцессор позволяет сделать процесс более гибким.

Ответ 8

Не существует Java-эквивалента директивы препроцессора, используемой на языках C/С++. Во всяком случае, вы можете сделать что-то подобное с помощью аннотаций или ANT, как это кратко описано здесь

Использование аннотаций для добавления C как директив препроцессора

или здесь

Как сделать условную компиляцию с Java

Ответ 9

Вместо того, чтобы сделать код условным путем предварительной обработки исходного кода (как это делает C), используйте объектно-ориентированное программирование: используйте шаблоны проектирования, такие как стратегия и инъекции зависимостей, чтобы сделать условный код.