如何在Java中使用每个平台类?

时间:2015-08-28 18:50:32

标签: java multiplatform

我正在用Java编写一个串行接口。它使用JNA访问底层本机API。我已经定义了一个包含经典方法的SerialPort接口(open,read,write,close,...):

public interface SerialPort {
    void open(String portName) throws IOException;
    void close() throws IOException;
    void write(byte[] data) throws IOException;
    byte[] read(int bytes) throws IOException;
    byte[] read(int bytes, int timeout) throws IOException;
    void setConfig(SerialConfig config) throws Exception;
    SerialConfig getConfig();
}

现在,我想基于运行平台实现。这样做的好方法是什么?我是否必须在运行时加载类?

如果我创建了两个实现此接口的类(SerialPortUnixSerialPortWin32)。我希望有一个函数可以根据平台返回一个或另一个。

我该如何正确地做到这一点?

谢谢,

1 个答案:

答案 0 :(得分:4)

为不同的平台实施不同的SerialPort个实例。假设我们有SerialPort个实现:serialPortWindows用于Windows,serialPortLinux用于Linux

然后使用System.getProperty("os.name");调用来确定平台并使用相关的类。

如果您的应用在Windows或Linux上运行,请尝试以下示例:

String os = System.getProperty("os.name").toLowerCase();
SerialPort serialPortImpl;
if (os.substring("windows") != -1) {
   // use windows serial port class
   serialPortImpl = serialPortWindows; 
} else {
   // use linux serial port class
   serialPortImpl = serialPortLinux;     
}

// now use serialPortImpl, it contains relevant implementation
// according to the current operating system