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

3

我正在编写一个程序,可以在Linux和Windows操作系统上运行。

if (isLinux) {
    // some linux code
} else {
    // some windows code
}

它使用平台相关的代码和库,因此目前无法在Linux上编译。我该如何只编译当前操作系统代码的一部分?


请发布相关代码。 - Arnaud
JNA方法用于Windows设置前台窗口,而在Linux上使用“xdotool”调用。当我在Linux上编译时,它当然找不到Windows JNA。但我也对不特定于我的当前代码的解决方案感兴趣。 - Andrey Putilin
1个回答

6
创建一个接口:
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代替。

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

请参见为什么Class.newInstance()是“邪恶的”?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接