当前位置: 首页 > 面试题库 >

Java中的#ifdef #ifndef

龚奇逸
2023-03-14
问题内容

我怀疑是否有一种方法可以像Java中的#ifdef #ifndef这样在Java中创建编译时条件。

我的问题是,有一种用Java编写的算法,并且对该算法的运行时间有所不同。因此,我想衡量每次使用改进后可以节省多少时间。

现在,我有一组布尔变量,这些布尔变量用于确定在运行时应该使用哪个改进,而不应该使用哪个改进。但是,即使测试这些变量也会影响总运行时间。

因此,我想找到一种方法来确定在编译期间应编译和使用程序的哪些部分。

有人知道用Java做到这一点的方法吗?或者,也许有人知道没有这种方法(这也很有用)。


问题答案:
private static final boolean enableFast = false;

// ...
if (enableFast) {
  // This is removed at compile time
}

上面显示的条件在编译时进行评估。如果相反,你使用此

private static final boolean enableFast = "true".equals(System.getProperty("fast"));

然后,JIT编译器将评估任何依赖enableFast的条件。此开销可忽略不计。



 类似资料:
  • ifdef声明 ifdef语句在分析时而不是运行时执行。 这允许您以非常有效的方式更改程序的运行方式。 由于ifdef语句在分析时工作,因此无法检查运行时值,而是可以在分析时设置或取消设置特殊定义。 语法 (Syntax) ifdef语句的语法如下 - ifdef macro then -- Statements will execute if the macro is defined. e

  • 问题内容: 我以前的编程中,代码段仅用于调试目的(记录命令等)。通过使用预处理程序指令,可以完全禁用这些语句以进行生产,如下所示: 做类似的事情的最好方法是什么? 问题答案: 如果只想禁用日志记录方法,请使用该模块。如果日志级别设置为排除调试语句,那么它将非常接近无操作(它仅检查日志级别并返回而不插入日志字符串)。 如果要在特定条件下以字节码编译时实际删除代码块,则唯一的选择是相当神秘的全局变量。

  • 在Java是否可以像在C/C++中那样做一种#ifdef的事情? 示例: 注意,即使是(如本例所示),它仍然会尝试编译中的代码,即使它不会(也不应该)编译。 我正在寻找一种进行条件编译的方法--编译器甚至不应该查看如果是。 我的问题的上下文是,我在Eclipse中有一个处理应用程序。我在两个单独的项目中同时使用常规处理和Android处理,但我希望能够在没有编译器错误的情况下在彼此之间移动项目的源

  • 问题内容: 我想在Linux和Windows上运行一些c ++代码。我只想为一个操作系统而不是其他操作系统包括一些代码。有一次可以使用的标准 #ifdef 吗? 就像是: 这个问题确实是重复的,但是这里的答案要好得多,尤其是被接受的答案。 问题答案: 采用:

  • 问题内容: 我的问题可能太广泛了,答案可能是简单的“否”,但我不得不问。 Java 7中有(Java 8)流 *的等效实现吗? 我熟悉(Java 8)流,但是我的项目要求是使用Java 7。 *不要与inputStream和outputStream混淆。 问题答案: 在官方API中,没有。 Java 7没有更多的公共更新。如果您是客户,您可能仍然会获得较小的更新,但是对于反向移植Stream AP

  • 问题内容: 我正在寻找Java中的KeyValuePair类。 由于java.util大量使用接口,因此没有提供具体的实现,只有Map.Entry接口。 我可以导入一些规范的实现吗?这是我讨厌实现100倍的“管道工编程”类之一。 问题答案: 类AbstractMap.SimpleEntry是通用的,并且可能有用。