我正在编写一个程序,可以在Linux和Windows操作系统上运行。
if (isLinux) {
// some linux code
} else {
// some windows code
}
它使用平台相关的代码和库,因此目前无法在Linux上编译。我该如何只编译当前操作系统代码的一部分?
我正在编写一个程序,可以在Linux和Windows操作系统上运行。
if (isLinux) {
// some linux code
} else {
// some windows code
}
它使用平台相关的代码和库,因此目前无法在Linux上编译。我该如何只编译当前操作系统代码的一部分?
interface OSSpecificStuff {
void method(...)
然后创建两个接口的实现,一个用于Windows,一个用于Linux。
class LinuxStuff implements OSSpecificStuff {
void method(...) {
Linux specific implementation
同样适用于类WindowsStuff等。为避免编译错误,将这些特定于操作系统的类编译为单独的jar文件。
使用以下命令创建相应的类:
Class clazz = isLinux ? Class.forName("LinuxStuff") : Class.forName("WindowsStuff");
OSSpecificStuff stuff= (OSSpecificStuff ) clazz.newInstance();
或者您可以创建两个名为OSSpecificStuff的类,并将它们放在两个不同的jar文件中,在运行程序时将适当的jar文件包含在类路径中。
高级内容:
您会发现SE上有很多帖子,讨论Class.newInstance
的问题,并建议使用Constructor
代替。
另外,我没有在上面的代码中使用泛型,以保持简单。