Java中多个平台的平台相关代码

Java中多个平台的平台相关代码,java,platform,Java,Platform,我正在编写一个可以在Linux和Windows操作系统上运行的程序 if (isLinux) { // some linux code } else { // some windows code } 它使用依赖于平台的代码和库,因此现在不在Linux上编译。如何仅编译当前操作系统代码的一部分?创建接口: interface OSSpecificStuff { void method(...) 然后创建两个接口实现,一个用于Windows,一个用于Linux class

我正在编写一个可以在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等类也是如此。为了避免编译错误,请将这些特定于O/S的类编译到单独的jar文件中

使用以下命令创建适当的类:

Class clazz = isLinux ? Class.forName("LinuxStuff") : Class.forName("WindowsStuff");
OSSpecificStuff stuff= (OSSpecificStuff ) clazz.newInstance();
或者,您可以创建两个名为OSSpecificStuff的类,将它们放在两个不同的jar文件中,并在运行程序时在类路径中包含相应的jar文件

高级资料:

你会发现很多SE关于
类的帖子。newInstance
不好,你可能想用
构造函数来代替

另外,我没有在上面的代码中使用泛型来保持简单


请参阅

请发布Windows的相关code.JNA方法,以设置Linux的前台窗口和“xdotool”调用。当我在Linux上编译时,当然找不到Windows JNA。但我也对解决方案感兴趣,它不是我当前代码所特有的。