1. 程式人生 > >Java 條件編譯 Conditional Compilation

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 反編譯工具反編譯就行了。

完整示例檔案下載

» 轉載請註明來源:www.litefeel.com » 《Java 條件編譯 Conditional Compilation
» 本文連結地址:https://www.litefeel.com/java-conditional-compilation/