2012-09-24 37 views
1

我已经在这里看到了答案,您可以在Java中使用最终静态常量变量来防止代码段被编译。我对这种方法的担忧是我很健忘。 :-(我很可能忘记在检查代码之前将变量设置为false,并且可能对项目产生负面影响。Java依赖于环境的编译

在C/C++中,可以指定可用于控制代码的编译,例如:

#if defined(_PROFILE) 
Time startTime; 
#endif 

... run some code ... 

#if defined(_PROFILE) 
Time endTime; 
std::cout << "Code took " << endTime - startTime << " seconds\n"; 
#endif 

因此,分析测试代码只会得到,如果有人明确定义可能因为编译器的命令行选项可以通过_profile宏并没有风险编译意外检查

有没有什么办法可以在Java中模拟这个?

回答

2

您可以使用运行属性。由于Java是动态编译的,它具有相同的效果。

static final boolean PROFILE = Boolean.getBoolean("VictimZero.PROFILE"); 

long startTime; 
if (PROFILE) 
    startTime = System.nanoTime(); 

... run some code ... 

if (PROFILE) { 
    long enTime = System.nanoTime(); 
    System.out.printf("Code took %.3f seconds%n", (endTime - startTime)/1e9); 
} 

您可以使用稍微哈克

static final boolean VICTIM_ZERO = 
         System.getProperty("user.name").equals("VictimZero"); 
+0

完美,谢谢! – VictimZero

+0

你甚至可以避免使用命令行属性;) –