gpt4 book ai didi

java - Java 中多个平台的平台相关代码

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:41:58 27 4
gpt4 key购买 nike

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

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

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

最佳答案

创建接口(interface):

interface OSSpecificStuff {
void method(...)

然后创建接口(interface)的两个实现,一个用于 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 文件包含在类路径中。

高级内容:

你会发现很多关于 Class.newInstance 不好的 SE 帖子,你可能想改用 Constructor

另外,为了简单起见,我没有在上面的代码中使用泛型。

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

关于java - Java 中多个平台的平台相关代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35157855/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com