根据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模式!");}// 用条件编译来判别不同的平台// 平台1if(CompilationConfig.currentPlatform == CompilationConfig.platform1){System.out.println("这里是平台1的输出!");}// 平台2if(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/

Java 条件编译 Conditional Compilation相关推荐

  1. java 条件编译_Java条件编译:如何防止代码块被编译?

    Java条件编译:如何防止代码块被编译? 我的项目需要Java 1.6进行编译和运行. 现在,我有一个要求使其与Java 1.5一起使用(从市场营销方面). 我想替换方法主体(返回类型和参数保持相同) ...

  2. 在MSBuild.exe中使用条件编译(Conditional Compile)

    参数的写法:"/p:DefineConstants=MY_PREPROC_FLAG YET_ANOTHER_FLAG" 注意,在使用 MSBuild 时,会出现C#项目中设置的输出 ...

  3. ASP.NET MVC View使用Conditional compilation symbols

    由于View(.cshtml)的运行时编译关系,在项目级别中定义的symbols是无法被直接使用的.需要在Web.config中添加compilerOptions(在View目录下的Web.confi ...

  4. elif是不是java关键字_C# 中的#if、#elif、#else、#endif等条件编译符号 (转载)

    这些是C#中的条件编译符号.这些指令我在项目中遇到过,查过网络,问过人(当然,既不认识大牛,也不认识小牛,所以没什么收获).今天翻看一本资料,有提到这个方面的东西,所以写下来和能看到这篇文章的人一起学 ...

  5. 计算机相关专业术语中英文对照

    计算机专业术语对照 A abstraction layer,抽象层 access,获取,存取 acoustic coupler,声音耦合器 Active Directory,活动目录 Acyclic ...

  6. 计算机专业术语对照表_艾孜尔江编

    A abstraction layer,抽象层 access,获取,存取 acoustic coupler,声音耦合器 Active Directory,活动目录 Acyclic Dependenci ...

  7. haxe 第二期 入门篇 (转载)

    文章很长很长但是讲的很详细,可以系统全面的了解haxe 一种语言, 适合任何时候使用 - Haxe特性杂谈 这里是原文:http://blog.csdn.net/vagrxie/article/det ...

  8. C和指针:第十三,十四章

    第13章  高级指针话题 1. 高级指针 1.) int *f()        // 由于()优先级高于*,f是一个函数,函数返回一个指向整型的指针: 2.) int (*f) ()    // 第 ...

  9. C# #if, #else和#endif预处理指令

        #if 使您可以开始条件指令,测试一个或多个符号以查看它们是否计算为 true.如果它们的计算结果确实为true,则编译器将计算位于 #if 与最近的 #endif 指令之间的所有代码.例如, ...

最新文章

  1. 新冠影响男性生育能力,肾脏睾丸易感染,科学家建议康复患者检查生殖系统...
  2. TCP/IP协议:概述
  3. 使用objectdatasource结合数据绑定控件进行简单三层架构的开发
  4. 异构网络垂直切换算法LTE/WIMAX切换
  5. springboot 压测 50并发 线程等待_Spring Boot中三款内嵌容器的使用
  6. javascript创建对象的几种方式 .
  7. RequestParam注解
  8. multisim秒信号发生器_频谱中射频干扰信号流化、分析与回放
  9. spring 数据库 链接db2_实例讲解使用Spring通过JPA连接到Db2
  10. CSS 12个趣味小技巧大公开 | 原力计划
  11. deepin linux字体设置,在deepin系统中如何安装系统字体? - Deepin深度系统用户手册...
  12. 威纶通触摸屏232脚位_威纶触摸屏tk6070iq232接口引脚电 – 手机爱问
  13. 51单片机八音盒C语言,单片机八音盒程序和与仿真原理图
  14. e5服务器系列天梯图,至强e5处理器天梯图_至强E5系列CPU排行榜高清图2020-win7之家...
  15. 渗透测试之信息收集漏洞库篇
  16. 苹果自带相册打马赛克_科普 | 谨慎使用苹果自带的笔打码订单哦!
  17. C++学习(二八一)Gradle下载目录里的随机码是什么
  18. 服务器启动项目抛错 没有到主机的路由
  19. 三家运营商MWC上发力5G 谁是背后更大的赢家
  20. 配置失败还原请勿关闭计算机,win7系统遇到更新失败提示“配置windwos update 失败还原更改,请勿关闭计算机”的解决方法...

热门文章

  1. MyBatis多参数传递之注解方式示例--转
  2. 使用 Spring Boot 快速构建 Spring 框架应用--转
  3. 简约之美Jodd-http--应用一箩筐
  4. 非对称加密算法RSA--转
  5. Hyperledger Fabric Rest API服务开发教程【含源码】
  6. 微软沈向洋:计算机视觉未来在语义层 “两大一精”是关键
  7. 七牛技术总监陈超:记Spark Summit China 2015
  8. 《数据结构》知识点Day_04
  9. 心中有“树”:数据结构之树详解
  10. PHP从远程mysql下载文件_PHP下载远程文件到指定目录