2011-04-26 26 views
2

在我尋求的#ifdef相當於在Java中,我發現,描述了一個辦法做到條件編譯這個偉大的主題:#ifdef #ifndef in JavaSystem.getProperty(「fast」)如何工作?

我不明白的是如何真正起作用:

  1. 爲什麼第二個表格 (System.getProperty)比 1st(false/true)要好?
  2. 「快」不是Java的 predefined properties之一。這 可能意味着我必須在我的代碼中定義 。什麼是 最好的地方在Android 應用程序中做到這一點? onCreate()是一個好地方嗎?

回答

3

1)第一個將被編譯器優化。也就是說,您將布爾屬性設置爲「true」,編譯器將放棄條件的else分支。如果將其設置爲false,則將丟棄當時的分支。如果您想快速切換到慢速或反之亦然,您必須重新編譯您的代碼。

2)您必須在啓動應用程序時定義系統屬性。設置VM範圍的屬性是一項優先操作。我不是一個Android專家,但我懷疑你可以在android應用程序的onCreate事件中設置它們。 System.getProperty背後的核心思想是,通過傳遞一個額外的命令行參數(如-Dfast = true),您可以在啓動虛擬機時切換應用程序模式。

+0

謝謝! 1 ++我是否正確地從你的答案中理解,第二種形式(使用System.getProperty)是**不是由編譯器優化的? – uTubeFan 2011-04-26 20:31:04

+0

是的,System.getProperty()是一個方法調用。編譯器無法預測此調用的結果,因此不會靜態移除其中一個分支。 – 2011-04-26 20:35:00

1
  1. 第二種更靈活,因爲您可以決定在開始時打開或關閉某些東西。第一個示例將被優化,所以您需要重新編譯才能更改該值。

  2. 一個Systemproperty通過-Dproperty = value來設置(注:之前被傳遞給main方法的命令行參數)

+0

也非常感謝您爲此做出的重大澄清。我已經接受了@塞巴斯蒂安的答案,所以請接受我的+1以表示我的讚賞。 – uTubeFan 2011-04-26 20:33:09

相關問題