我正在用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();
}
现在,我想基于运行平台实现。这样做的好方法是什么?我是否必须在运行时加载类?
如果我创建了两个实现此接口的类(SerialPortUnix
和SerialPortWin32
)。我希望有一个函数可以根据平台返回一个或另一个。
我该如何正确地做到这一点?
谢谢,
答案 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