Java 條件編譯 Conditional Compilation
根據Java編譯器的優化的機制,Java也能夠提供條件編譯。對于條件設為false的語句,編譯器將不對條件覆蓋的代碼段生成字節碼。
不僅可以用簡單的boolean常量值來做條件編譯,還可以用字符串常量及任何其他類型的常量.
例如:
1. 簡單的boolean常量。
final boolean isDebug = true; if(isDebug) { //debug模式狀態 System.out.println("現在是debug模式!"); } |
2. 字符串常量。
這里要注意的是不能用equals方法,必須用簡單的判斷符號(==, != ....)
final String debug = "true"; final String currentMode = debug; if(currentMode == debug) { //debug模式狀態 System.out.println("現在是debug模式!"); } |
3. 其他常量就不設置了
當然我們可以寫個CompilationConfig類,里面僅設置所有要用條件編譯的選項。
這里我寫了個示例,呵呵,記錄下以后不要忘記了,也希望能夠幫助需要這方向東東的人。
ConmpilationCofig.java
package com.litefeel.javaConditionalCompilationTest; /** * 這是一個配置條件編譯的類,實際編譯后這個類并不跟其他文件關聯 * @author lite3 * */ public class CompilationConfig { //配置是否是debug模式, 關鍵字 final是啟用條件編譯的關鍵 static public final boolean isDebug = true; //用條件編譯來判別不同的平臺 static public final String platform1 = "platfor1"; static public final String platform2 = "platform2"; //當前所用的平臺 static public final String currentPlatform = platform1; } |
javaConditionalCompilationTest.java
package com.litefeel.javaConditionalCompilationTest; public class ConditionalCompilationTest { public ConditionalCompilationTest() { //用條件編譯來去除多余代碼 //這里僅僅是輸出語句,也可以是其他邏輯代碼 final String debug = "true"; final String currentMode = debug; if(currentMode == debug) { //debug模式狀態 System.out.println("現在是debug模式!"); } //用條件編譯來判別不同的平臺 //平臺1 if(CompilationConfig.currentPlatform == CompilationConfig.platform1) { System.out.println("這里是平臺1的輸出!"); } //平臺2 if(CompilationConfig.currentPlatform == CompilationConfig.platform2) { System.out.println("這里是平臺2的輸出!"); } } static public void main(String[] args) { //實例化條件編譯 new ConditionalCompilationTest(); } } |
編譯后,javaConditionalCompilationTest.class 反編譯后為:
package com.litefeel.javaConditionalCompilationTest; import java.io.PrintStream; public class ConditionalCompilationTest { public ConditionalCompilationTest() { String debug = "true"; String currentMode = "true"; System.out.println("現在是debug模式!"); System.out.println("這里是平臺1的輸出!"); } public static void main(String[] args) { new ConditionalCompilationTest(); } } |
很明顯已經去掉了平臺2的代碼。
如果不知道怎么反編譯,請使用Java 反編譯工具反編譯就行了。