1

我在这里看到了答案,您可以在 Java 中使用 final static 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中模仿这个?

4

1 回答 1

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");
于 2012-09-24T16:18:18.883 回答