在 JavaScript 世界中,经常发生用户的浏览器没有实现某个功能,但可以通过添加一些额外的代码作为解决方法来支持它。这通常被称为“垫片”(或“shiv”)。#define ENABLE_XYZ_SUPPORT 1
在 CI 中,在编译时使用类似then的预处理做了类似的事情#if ENABLE_XYZ_SUPPORT 1
。
Java中有这样的东西吗?也就是说,我希望能够用 Java 1.6 编译一些为 Java 1.7 设计的源代码。如果没有内置的语言结构,也许有一个库?
背景:我对 Java 有点陌生,并且正在开发我的第一个非常大的项目(基本上是一个有条件地组装来自各种来源的数据的 servlet)。由于这是一个全新的项目,利用 Java 1.7 的一些新特性(例如实现AutoCloseable
对象接口而不是仅仅Closeable
让它们可以与try-with-resources
. 但是,如果这个应用程序可以构建为在 Java 1.6 上运行以备不时之需,那就太好了。如果我可以添加一个参数或其他东西来定义我自己的AutoCloseable
接口,那么这可以编译,因为我实际上并没有使用try-with-resources
——只是试图使用最合适的接口。
我意识到如果它是为 1.6 构建的,我可以做一些事情,比如让 maven 运行一个外部工具来用 Closeable 替换 AutoCloseable。但是,这并不是我真正想要的(不够笼统)。
更新:为了澄清,我想知道我是否可以在编译时有条件地做这样的事情:
#if java version < 1.7
public interface AutoCloseable {
void close() throws Exception;
}
#endif
顺便说一句,我在这个项目中使用了 maven,所以如果它有一个对这里有帮助的功能,那可能值得考虑。