Java条件コンパイル

8457 ワード

C言語やC++言語を学習したことのある学生は、条件コンパイルをサポートしていることを知っています.今日はJava言語で条件コンパイルをどのように実現するかを学びましょう.Java言語自体は条件コンパイルを提供していませんが、Javaコンパイラは.javaファイルを.classファイルにコンパイルするのに最適化しています.以下、一例で詳しく説明します.
      HelloWorld.javaファイルを次に示します.
 1 package com.test;

 2 

 3 /**

 4  * Test Demo

 5  */

 6 public class HelloWorld {

 7 

 8     public static void main(String[] args) {

 9         if (BuildConfig.FLAG) {

10             System.out.println("Hello World");

11         } else {

12             System.out.println("Java      ");

13         }

14     }

15 

16 }

       BuildConfig.javaファイルを見てみましょう.      
package com.test;



/**

 * Created by Administrator on 2015/5/24.

 */

public final class BuildConfig {



    public static final boolean FLAG = false;

}

 
この.javaファイルが.classファイルに変換された内容を見てみましょう.
//

// Source code recreated from a .class file by IntelliJ IDEA

// (powered by Fernflower decompiler)

//



package com.test;



public class HelloWorld {

    public HelloWorld() {

    }



    public static void main(String[] args) {

        System.out.println("Java      ");

    }

}

      BuildConfig.FLAGは常にfalseであり、ifブロック内のコードももちろん実行されず、このコードは.classファイルにコンパイルされないことがわかります.
FLAGが文字列だったらどうなりますか?文字列間でequalsを使用して比較すると、.classファイルに変換するときに最適化されません.
      HelloWorld.javaファイル:
package com.test;



/**

 * Test Demo

 */

public class HelloWorld {



    public static void main(String[] args) {

        if (BuildConfig.FLAG.equals("false")) {

            System.out.println("Hello World");

        } else {

            System.out.println("Java      ");

        }

    }



}

       HelloWorld.classファイル:
//

// Source code recreated from a .class file by IntelliJ IDEA

// (powered by Fernflower decompiler)

//



package com.test;



public class HelloWorld {

    public HelloWorld() {

    }



    public static void main(String[] args) {

        if("false".equals("false")) {

            System.out.println("Hello World");

        } else {

            System.out.println("Java      ");

        }



    }

}

      本当に文字列比較が必要な場合は、条件コンパイルを実現するには「==」を使用します.
      HelloWorld.javaファイル:
package com.test;



/**

 * Test Demo

 */

public class HelloWorld {



    public static void main(String[] args) {

        if (BuildConfig.FLAG == "false") {

            System.out.println("Hello World");

        } else {

            System.out.println("Java      ");

        }

    }



}

       HelloWorld.classファイル:
//

// Source code recreated from a .class file by IntelliJ IDEA

// (powered by Fernflower decompiler)

//



package com.test;



public class HelloWorld {

    public HelloWorld() {

    }



    public static void main(String[] args) {

        System.out.println("Hello World");

    }

}