【问题标题】:How to dynamically inherit depending on operating system?如何根据操作系统动态继承?
【发布时间】:2018-10-23 11:51:53
【问题描述】:

我正在开发两个操作系统。每个都有BaseClass 的特定实现。我想抽象出这些实现。我的想法是使用两个实现都实现的接口,然后使用工厂模式返回操作系统特定的类。这看起来类似于this

但是,采用这种方法需要我在构建应用程序之前指定应该使用哪个实现,例如通过一个包含操作系统名称的常量变量(链接答案中的platform 变量)。这对我来说似乎是一个糟糕的设计选择。 是否有另一种方法来定义要构建的操作系统?

【问题讨论】:

  • “……采用这种方法需要我在构建应用程序之前指定应该使用哪个实现……”为什么?为什么不能在代码中包含这两种实现,并编写单独的代码,根据os.name 系统属性在运行时决定使用哪一种?

标签: java inheritance cross-platform


【解决方案1】:

你没有。

这不是 Java 的工作方式。 Java 程序不是为特定的目标系统编译的,它们应该是可移植的并且可以在所有系统上工作。见Possible to run JAR file on any OS?

如果你需要做一些真正特定于操作系统的事情,你可以使用系统属性来找出程序在运行时运行在哪个操作系统上。然后,您可以使用此信息在某种工厂中选择合适的实现,但这是一个运行时决定。

找出操作系统的一些方法:How do I programmatically determine operating system in Java?

【讨论】:

    【解决方案2】:

    java 将操作系统名称存储在其标准属性中,因此以下调用应为您提供操作系统名称:

    System.getProperty("os.name")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      相关资源
      最近更新 更多