详情:我有一个称为“OS”的实用类,封装了所有特定于操作系统的事物。它有一个方法。
public static void openFile(java.io.File file) throws java.io.IOException {
// open the file using java.awt.Desktop
...
}
如何像双击一样打开文件(使用start
Windows命令或open
Mac OS X命令等)。由于它不能与Java 1.5编译,我想在编译时排除它,并用另一种方法替换它,该方法调用run32dll
(Windows)或open
(Mac OS X),并使用Runtime.exec
。
问题:我该怎么做?注释能帮上忙吗?
注意:我使用ant,并且可以创建两个java文件OS4J5.java
和OS4J6.java
,其中包含OS
类的所需代码,用于Java 1.5和1.6,并在编译之前将其中一个复制到OS.java
中(或者一个丑陋的方式-有条件地替换OS.java
的内容,具体取决于Java版本),但如果有其他方法,我不想这样做。
更详细地说明:在C中,我可以使用ifdef、ifndef
,在Python中没有编译,我可以使用hasattr
或其他方法检查特性,在Common Lisp中,我可以使用#+feature
。有类似于Java的东西吗?
发现这篇帖子,但似乎没什么用。
非常感谢任何帮助。kh。
OS4J5
和OS4J6
编译成.class
文件,然后编写一个自定义类加载器来根据运行时版本选择哪个文件。 - JUST MY correct OPINIONjava.awt.Desktop
,这会导致在OS4J6.java
上出现错误。 - khachik.class
文件就是向下兼容的。 - JUST MY correct OPINIONException in thread "main" java.lang.UnsupportedClassVersionError: Bad version number in .class file
. - khachik