【问题标题】:Java environment-dependent compilationJava 环境相关编译
【发布时间】:2012-09-16 03:25:56
【问题描述】:

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

【问题讨论】:

    标签: java compiler-construction configuration options


    【解决方案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);
     }
    

    你可以使用稍微hacky的

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

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 2014-01-28
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 2018-05-07
      相关资源
      最近更新 更多