2012-03-16 3 views
4

У меня есть алгоритм, написанный на C, и у него есть код, который может обрабатываться препроцессором C, но поскольку в java нет препроцессора, я не знаю, как написать код Java для обработки такой вещи. Код СВнесите #ifdef в Java

#ifdef Tile_size_utility 
#define print_error 0 
else 
#define print_error 1 
#endif 

Как я могу реализовать это в Java?

+0

Возможно, это помогает: http://www.javaworld.com/javaworld/javatips/jw-javatip5.html –

+0

Статический окончательный int так же близко, как вы получите – Kevin

+1

Я получаю ответ от: http: // stackoverflow. ком/вопросы/1813853/IFDEF-IfNDef-в-Java – NguyenDat

ответ

1
Class ErrorVerbose { 
      private static boolean enabled = False; 

      public static setEnable(boolean enable) 
       enabled = enable; 
      } 

      public static perror(String msg) { 

       if (enabled) { 
       /* Print */ 
       } 

      } 
    } 


class YourClass { 

      public YourClass(....,boolean status) { 

       ErrorVerbose.SetEnable(status) 
        . 
        . 
      } 

    } 

Ну, да, либо вы можете сделать, это не статический класс, чтобы другие классы могли включать/отключать подробные. Преимущество создания класса ErrorVerbose заключается в том, что вы добавляете дополнительную информацию, такую ​​как время, дата, имя функции (которая называется) и т. Д., Что делает ее более информативной, я просто дал скелет.

1

Вы не можете.

Но у Java есть наследование и полиморфизм. Вы можете использовать эти концепции вместе с шаблоном инъекции зависимостей, чтобы решить проблему в чище, но по-другому.

Я могу дать вам более точный ответ, если вы разместите информацию о том, что делает этот print_error.

3

Мы не можем перевести его на Java. Мы должны проанализировать, где установлено свойство (Tile_size_utility) и где нам нужно print_error. Тогда мы можем реализовать эквивалентное решение.

Пример: если предположить, Tile_size_utility это свойство системы (устанавливается на окружающую среду), и мы должны PRINT_ERROR как (логическое) флаг, то это должно работать:

public class MyClass { 

    public final static boolean PRINT_ERROR = 
      (System.getProperty("Tile_size_utility") != null); 

} 

Теперь, если вы делаете некоторые set Tile_size_utility=myutiliy или начало Java с аргументом

-DTile_size_utility=myutiliy 

затем PRINT_ERROR будет установлен в true.

0

Построить DefineManger с помощью:

abstract public class DefineManager { 
    abstract public boolean isDefined(String k); 
    abstract public String getDefine(String k); 
    abstract public void setDefine(String k, String v); 
    abstract public void  undefine(String k); 
} 

if (isDefined("Tile_size_utility")) { 
    setDefine("print_error", "0"); 
} 
else { 
    setDefine("print_error", "1"); 
} 
0

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

Возможно, вы обнаружите, что многие из трюков, поддерживаемых C++, не нужны в Java, поскольку у него есть другие решения проблемы, которые остаются в JVM. Java, как правило, плохо работает по сравнению с другими языками, но то, что у него есть, сильно оптимизировано способами, которые могут удивить некоторых разработчиков.

Смежные вопросы