我有一個項目,其中有許多代碼只在確定的版本中可用,當我修復一個錯誤時,我必須在所有副本中修復它們。這是非常不方便的。Java/Android中是否存在#IF和#CONST .NET等價物?
在Java中是否有任何#IF
和#CONST
,即如果#IF
子句爲false,代碼將不會被編譯?
我有一個項目,其中有許多代碼只在確定的版本中可用,當我修復一個錯誤時,我必須在所有副本中修復它們。這是非常不方便的。Java/Android中是否存在#IF和#CONST .NET等價物?
在Java中是否有任何#IF
和#CONST
,即如果#IF
子句爲false,代碼將不會被編譯?
沒有Java的「官方」預處理器,也沒有廣泛使用的第三方預處理器。
但是,如果您願意忍受IDE和許多其他工具無法正確處理的障礙,則無法阻止您在代碼中使用任何預處理器。
這就是說,你不需要通常在Java中也需要它。你寧願提供一個公共接口的多個實現(或者擴展一個公共基類的類),並在運行時選擇它們。
還有就是,通過使用編譯時間常數布爾型標記條件編譯的但是有限的形式:
static final DEBUG = false;
public void frobnicate() {
if (DEBUG) {
doExpensiveFrobnicationDebugOperation();
}
doActualFrobnication();
}
該代碼將導致昂貴的方法調用不被編譯成所得的字節碼.class
文件。
這是一個很好的答案,比我的更有幫助+1 –
謝謝,我已經知道這個。 2個好處:編譯的文件大小更小第二:它減少了「免費」版本被破解爲「完整」版本的機會(第二個可能不是Android的問題,只是用PC)無論如何,謝謝你的回答: ) – AndBie
@AndBie:對於這兩個混淆器可能會有所幫助。不是因爲它讓代碼更難破解(我並不真正相信),而是因爲它可以刪除死代碼(甚至是永遠不會被調用的方法!)。這通常是爲什麼在J2ME代碼中使用混淆器的原因,即使它是免費/免費軟件。 –