Java条件コンパイル
8457 ワード
C言語やC++言語を学習したことのある学生は、条件コンパイルをサポートしていることを知っています.今日はJava言語で条件コンパイルをどのように実現するかを学びましょう.Java言語自体は条件コンパイルを提供していませんが、Javaコンパイラは.javaファイルを.classファイルにコンパイルするのに最適化しています.以下、一例で詳しく説明します.
HelloWorld.javaファイルを次に示します.
BuildConfig.javaファイルを見てみましょう.
この.javaファイルが.classファイルに変換された内容を見てみましょう.
BuildConfig.FLAGは常にfalseであり、ifブロック内のコードももちろん実行されず、このコードは.classファイルにコンパイルされないことがわかります.
FLAGが文字列だったらどうなりますか?文字列間でequalsを使用して比較すると、.classファイルに変換するときに最適化されません.
HelloWorld.javaファイル:
HelloWorld.classファイル:
本当に文字列比較が必要な場合は、条件コンパイルを実現するには「==」を使用します.
HelloWorld.javaファイル:
HelloWorld.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");
}
}