有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

编译器构造与Java环境相关的编译

我在这里看到了答案,您可以在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中模仿这一点


共 (1) 个答案

  1. # 1 楼答案

    可以使用运行时属性。由于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");