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

时间:2016-02-02 15:47:49

标签: java platform

我正在编写应该在Linux和Windows操作系统上运行的程序。

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

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

1 个答案:

答案 0 :(得分:6)

创建一个界面:

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文件。

高级内容:

你会发现很多关于Class.newInstance错误的SE帖子,你可能想要使用Constructor

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

请参阅Why is Class.newInstance() “evil”?