所以,在像C和C ++这样的语言中,我可以定义一个预处理器指令并像这样进行条件编译:
#define DEBUG 1
#ifdef DEBUG
cout << "Some Stuff, blah blah blah" << endl;
#endif
我的目标是在Java中执行类似或类似的操作,以便我可以进行一些调试,只需打开或关闭DEBUG,即可快速进行调试或发布编译。在java中有什么接近这个的吗?也许是
public static final String DEBUG = "YES"
我不知道....有什么地方接近这个,我最好的策略是什么。建议?
编辑:我希望避免任何自定义库,因为我是OCD ..... lol答案 0 :(得分:1)
我使用布尔常量来做...
public static final boolean VERBOSE = true;
.
.
.
if (VERBOSE) log("your message here");
当VERBOSE = false时,编译器会忽略IF语句。
答案 1 :(得分:1)
我通常会这样做:
public static final bool FEATURE_SOMETHING = false
if (FEATURE_SOMETHING) {
do something / instantiate other class etc.
}
答案 2 :(得分:1)
如果它只是您需要的日志记录,则有许多Java logging APIs可供选择,包括一个内置于Java本身。它们不会像条件代码那样方便。但是,当部署代码时,您可以打开日志记录并获取输出,这是您无法使用预处理代码执行的。
答案 3 :(得分:1)
在这种情况下,Java非常灵活,此外还有许多自定义库使您能够执行此操作(log4j)。
由于您不想使用它们中的任何一个,但仍允许您在不重新编译代码的情况下灵活地执行此操作,
enabledebug =真
定义全局属性
class Global {
public static boolean DEBUGFLAG=false;
}
定义一个方法来读取属性,将标志值定义为全局变量
public void load() {
Properties props = new Properties();
FileInputStream fis = new FileInputStream("....custom.properties")
props.load(fis);
Global.DEBUGFLAG= Boolean.valueOf(props.get("enabledebug"));
}
从主方法
load
方法
在需要打印详细
时使用该标志if(Global.DEBUGFLAG) {
//print some thing
}