Java编译-有没有办法告诉编译器忽略我的部分代码?

Merv:

我维护一个Java Swing应用程序。

为了与Java 5(适用于Apple机器)向后兼容,我们维护了两个代码库,一个使用Java 6中的功能,另一个不使用这些功能。

除了使用Java 6功能的3-4个类外,代码基本相同。

我只想维护1个代码库。编译期间是否有办法让Java 5编译器“忽略”我的代码的某些部分?

我不想根据我的Java编译器的版本简单地注释/取消注释代码的某些部分。

18兔子:

假设这些类具有相似的功能,但在实现方面与1.5和6.0有所不同,则可以将它们合并为一个类。然后,无需编辑源以进行注释/取消注释,就可以依靠编译器始终执行的优化。如果if表达式始终为false,则if语句中的代码将不包含在编译中。

您可以在一个类中创建一个静态变量,以确定要运行的版本:

public static final boolean COMPILED_IN_JAVA_6 = false;

然后让受影响的类检查该静态变量,并将代码的不同部分放入一个简单的if语句中

if (VersionUtil.COMPILED_IN_JAVA_6) {
  // Java 6 stuff goes here
} else {
  // Java 1.5 stuff goes here
}

然后,当您要编译另一版本时,只需更改该变量并重新编译即可。它可能会使Java文件变大,但是它将合并您的代码并消除您所拥有的任何代码重复。您的编辑器可能会抱怨无法访问的代码或其他任何内容,但是编译器应该乐于忽略它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java / JVM(HotSpot):有没有办法在编译时节省JIT性能的收益?

有没有办法告诉编译器忽略C中的某些代码块?

有没有办法标记编译器忽略未使用的导入?

有没有办法结合编译器防火墙(Pimpl)和默认可复制性的优点?

有没有办法从Rust程序中检测编译器版本?

有没有办法追踪任何编译器的模板参数推导?

有没有办法从Typescript编译器API获取节点的行号?

有没有办法告诉Rust编译器在处理恐慌时对部分初始化的数组元素调用drop?

有没有办法在C ++编译器中禁用复制省略

有没有办法告诉C编译器指针没有别名存储?

有没有办法让32位C ++编译器遵循16位整数提升规则?

有没有办法断言编译器将函数识别为尾递归?

有没有办法在浏览器中编译代码(C / C ++)?

从编译器获取参数时,有没有办法避免预处理器宏?

有没有办法检查编译器是否内联C ++ lambda函数?

从临时返回按值的string_view时,有没有办法得到编译器警告?

泛型:有没有办法让编译器检查T是否是特定的UIView子类?

有没有办法在较旧的C / C ++编译器中使用C ++ 11线程对象

Google Closure编译器发出警告:类型不兼容;即使参数具有通用类型,有没有办法解决?

有没有办法重新排列由TypeScript编译器生成的JavaScript模块?

有没有办法让 Swift 编译器忽略错误?

有没有办法在使用 IntelliJ 时在代码更改后使用 maven 自动编译?

有没有办法告诉编译器我正在管理循环中变量的所有权?

有没有办法“告诉” IntelliSense 和编译器该类实现了接口而不实际实现它?

有没有办法在 C 中编译和执行动态生成的代码?

Angular:有没有办法在模板中显示原始(原始/未编译)代码

为了使用 AWS Gamelift API,有没有办法防止 IL2CPP 编译器在 Unity 中进行程序集剥离?

有没有办法让编译器相信 @NonNull 变量在 Kotlin 中实际上是可空的?

有没有办法在 haxe 中获取编译器版本?