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/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS
» 本文链接地址:https://www.litefeel.com/java-conditional-compilation/
» 订阅本站:www.litefeel.com/feed/
» Host on Linode VPS
从9月7号到今天晚上,保存了包括博主在内的两个网友的flex/flash博客文章,共计254个word文档,46份附件.谢谢像博主这样辛勤的网友耕耘blog分享给我们~~
@一个人穷浪漫
恩,那就好的,呵呵
国庆后全部转载到qq空间
我全部保存到word了,以后全部转载到qq,加链接的
@一个人穷浪漫
记得加链接啊,呵呵
你的blog文快保存完了
很想有一份电子版的blog文,关于flash/flex的所有文章:)
你的blog快要报错完了:)
o
@一个人穷浪漫
编译器优化不能用OOP来弄的,编译器优化只能优化常量比较的.
这在面向对象语法上说不去吧
@一个人穷浪漫
用== != 这些是运算符号,编译器能够明白的,但是equals却是String的方法,编译器不能明白的.
"这里要注意的是不能用equals方法,必须用简单的判断符号(==, != ....) "
为什么呢