【问题标题】:Java Static method in singleton class [closed]单例类中的Java静态方法[关闭]
【发布时间】:2016-03-29 11:46:35
【问题描述】:

哪个更好? 我有一个单例类,它在我的应用程序启动时被初始化,并且我有一个抽象的 Util 类。我应该在单例类中创建本地方法还是在抽象 Util 类中创建静态方法?哪个更有效,为什么?注意:该方法不会改变实例变量的状态

Eclipse 建议我的许多单例类本地方法可以声明为静态。在这种情况下有什么更好的方法?

【问题讨论】:

  • 显示代码可能会更好。而且,更好地用于什么目的/在什么情况下?
  • 它是否读取实例变量?
  • 它们都可能违反了一个或多个 OOP 原则,尤其是封装。
  • Eclipse 建议我的单例类中的许多方法可以声明为静态。我想知道什么更好?

标签: java performance static-methods


【解决方案1】:

您不应该根据性能做出这种决定。性能方面的任何差异都将由编译器或 JVM 优化/修复。

相反,想想什么是合乎逻辑的。使代码对局外人有意义。它只是启动方法吗?它可能应该放在单例实例中。它是更通用的实用程序吗?把它放在一个实用程序类中。

【讨论】:

  • 谢谢!!!它更多的是实用功能。我之所以想到它,是因为 eclipse 建议我的 Singleton 类中的许多函数都可以声明为静态的。
【解决方案2】:

您应该以一种不必首先关心这些事情的方式来构建您的应用程序。 abstract 中的 static 方法毫无意义。理想情况下,您使用 I.o.C.容器,或者,如果您只想使用单例,请通过构造函数参数或设置器传播实例,因为您保持依赖关系图干净。

知道你使用单例的类越少越好。

【讨论】:

    【解决方案3】:

    正如其他人已经说过的:这取决于。

    据我了解,您说的是纯实用程序方法(例如 Collections.sort)。在这种情况下,由于您实际上不需要对象,因此请将其设为静态。 (一般来说:尽量避免只是函数集合的无用对象 - 在这种情况下使用静态对象。)

    如果它是给定(单例)对象上的函数或依赖于给定(单例)对象,它应该去那里。

    【讨论】:

      【解决方案4】:

      如果您不打算更改方法中的实例变量,则可以使用静态函数,它可以更好地实现数学函数等常用工具。否则,由于以下原因,我更喜欢使用单例方法而不是静态方法.

      1. 您可以实现继承。
      2. 它可以在最近初始化,这与静态方法不同,静态方法在加载后会立即初始化。
      3. 您可以释放单例类使用的内存。
      4. 您可以覆盖该方法。

      【讨论】:

        猜你喜欢
        • 2015-08-12
        • 2014-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-26
        • 2011-12-20
        • 1970-01-01
        相关资源
        最近更新 更多