Java条件编译:如何防止代码块被编译?

7 浏览
0 Comments

Java条件编译:如何防止代码块被编译?

我的项目需要使用Java 1.6进行编译和运行。现在我有一个要求,需要将其与Java 1.5一起使用(从市场方面来说)。我想要替换方法的主体部分(返回类型和参数保持不变),使其能够在Java 1.5下编译而没有错误。

详情:我有一个名为OS的实用类,封装了所有与操作系统相关的内容。它有一个方法

public static void openFile(java.io.File file) throws java.io.IOException {
  // 使用java.awt.Desktop打开文件
  ...
}

用于像双击一样打开文件(类似于Windows的"start"命令或Mac OS X的"open"命令)。由于它无法在Java 1.5下编译,我想要在编译时将其排除,并替换为另一个方法,该方法使用`Runtime.exec`调用Windows的`run32dll`或Mac OS X的`open`。

问题:我该如何做?注解可以帮助吗?

注意:我使用ant,并且我可以创建两个Java文件`OS4J5.java`和`OS4J6.java`,它们将包含具有Java 1.5和1.6所需代码的`OS`类,并在编译之前将其中一个复制到`OS.java`(或者使用一种不好的方式 - 有条件地替换`OS.java`的内容取决于Java版本),但如果有其他方法,我不想这样做。

更详细地说:在C语言中,我可以使用`#ifdef`,`#ifndef`,在Python中没有编译,我可以使用`hasattr`或其他方式来检查一个特性,在Common Lisp中,我可以使用`#+feature`。Java中是否有类似的功能?

这篇帖子中找到了一些信息,但似乎没有什么帮助。

非常感谢任何帮助。kh.

0