Java环境相关的编译

时间:2012-09-24 16:15:06

标签: java compiler-construction configuration options

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

在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中模仿这个?

1 个答案:

答案 0 :(得分: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);
 }

你可以使用稍微hacky

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