我正在编写的程序应该运行在Linux和Windows操作系统上。
if (isLinux) {
// some linux code
} else {
// some windows code
}它使用依赖于平台的代码和库,因此它现在不能在Linux上编译。如何只编译当前操作系统代码的一部分?
发布于 2016-02-02 16:24:10
创建一个接口:
interface OSSpecificStuff {
void method(...)然后创建两个接口实现,一个用于Windows,另一个用于Linux。
class LinuxStuff implements OSSpecificStuff {
void method(...) {
Linux specific implementation为了避免编译错误,请将这些O/S特定的类编译成单独的jar文件。
使用以下方法创建适当的类:
Class clazz = isLinux ? Class.forName("LinuxStuff") : Class.forName("WindowsStuff");
OSSpecificStuff stuff= (OSSpecificStuff ) clazz.newInstance();或者,您只需创建两个名为OSSpecificStuff的类,并将它们放在两个不同的jar文件中,并在运行程序时将适当的jar文件包含在类路径中。
高级材料:
您会发现很多SE文章都是关于Class.newInstance是如何坏的,您可能想要使用Constructor。
另外,我还没有在上面的代码中使用泛型来保持简单。
https://stackoverflow.com/questions/35157855
复制相似问题