2011-06-24 73 views
5

我有一個項目,其中有許多代碼只在確定的版本中可用,當我修復一個錯誤時,我必須在所有副本中修復它們。這是非常不方便的。Java/Android中是否存在#IF和#CONST .NET等價物?

在Java中是否有任何#IF#CONST,即如果#IF子句爲false,代碼將不會被編譯?

回答

6

沒有Java的「官方」預處理器,也沒有廣泛使用的第三方預處理器。

但是,如果您願意忍受IDE和許多其他工具無法正確處理的障礙,則無法阻止您在代碼中使用任何預處理器。

這就是說,你不需要通常在Java中也需要它。你寧願提供一個公共接口的多個實現(或者擴展一個公共基類的類),並在運行時選擇它們。

還有就是,通過使用編譯時間常數布爾型標記條件編譯的但是有限的形式:

static final DEBUG = false; 

public void frobnicate() { 
    if (DEBUG) { 
    doExpensiveFrobnicationDebugOperation(); 
    } 
    doActualFrobnication(); 
} 

該代碼將導致昂貴的方法調用被編譯成所得的字節碼.class文件。

+0

這是一個很好的答案,比我的更有幫助+1 –

+1

謝謝,我已經知道這個。 2個好處:編譯的文件大小更小第二:它減少了「免費」版本被破解爲「完整」版本的機會(第二個可能不是Android的問題,只是用PC)無論如何,謝謝你的回答: ) – AndBie

+2

@AndBie:對於這兩個混淆器可能會有所幫助。不是因爲它讓代碼更難破解(我並不真正相信),而是因爲它可以刪除死代碼(甚至是永遠不會被調用的方法!)。這通常是爲什麼在J2ME代碼中使用混淆器的原因,即使它是免費/免費軟件。 –

0

有沒有這樣的事情作爲Java的預處理器,所以不幸的是你不能做條件編譯。

+0

真的嗎?這很糟糕:(我仍然在等待另一個答案,希望那裏有,或者有另一個解決方案。 – AndBie

相關問題