【问题标题】:How does System.getProperty("fast") work?System.getProperty("fast") 是如何工作的?
【发布时间】:2011-08-13 08:20:00
【问题描述】:

在我搜索 Java 中的 #ifdef-equivalent 时,我发现了这个很棒的线程,它描述了一种进行条件编译的方法:#ifdef #ifndef in Java

我不明白这是如何工作的:

  1. 为什么是第二种形式 (System.getProperty) 比 第一个(假/真)?
  2. “快速”不是 Java 的一种 predefined properties。这 可能意味着我必须定义 它在我的代码某处。是什么 在 Android 中执行此操作的最佳位置 应用程序? onCreate() 是个好地方吗?

【问题讨论】:

    标签: java android debugging conditional-compilation


    【解决方案1】:

    1) 第一个将由编译器优化。也就是说,您将布尔属性设置为“true”,编译器将丢弃条件的 else 分支。如果将其设置为 false,则 then-branch 将被丢弃。如果您想快速切换到慢速或反之,则必须重新编译代码。

    2) 您必须在启动应用程序时定义系统属性。设置 VM 范围的属性是一项优先操作。我不是 android 专家,但我怀疑您是否可以在 android 应用程序的 onCreate-event 中设置这些。 System.getProperty 背后的核心思想是,您可以在启动虚拟机时通过传递额外的命令行参数(如 -Dfast=true)来切换应用程序模式。

    【讨论】:

    • 谢谢! 1++ 我是否从您的回答中正确理解第二种形式(使用 System.getProperty)没有由编译器优化?
    • 是的,System.getProperty() 是一个方法调用。编译器无法预测此调用的结果,因此不会静态删除其中一个分支。
    【解决方案2】:
    1. 第二个更灵活,因为您可以决定在启动时打开或关闭某些东西。第一个示例将被优化掉,因此您需要重新编译以更改值。

    2. Systemproperty 由 -Dproperty=value 设置(注意:在传递给 main 方法的命令行参数之前)

    【讨论】:

    • 也感谢您的澄清。我已经接受了@Sebastian 的回答,所以请接受我的 +1 以表示感谢。
    猜你喜欢
    • 2013-05-08
    • 2011-12-26
    • 2011-09-13
    • 2020-01-31
    • 2023-03-17
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2011-03-31
    相关资源
    最近更新 更多