【问题标题】:Using singleton class instance as class level variable is acceptable?使用单例类实例作为类级变量是否可以接受?
【发布时间】:2014-03-19 06:59:38
【问题描述】:

我有一个单身课程。 MsgLog

我可以像下面这样使用这个类吗?这有什么问题吗?

public class SomeBean {
   MsgLog log = MsgLog.getInstance(); // IS THIS FINE?

   // some code
   private void someMethod() {
        log.printIt(" test ");
   }
}

【问题讨论】:

  • MsgLog 实例还在哪里使用?它的printIt 方法有什么作用?
  • @milkplusvellocet 只是记录器
  • 这不是很有帮助。在不了解类的内部结构的情况下,很难就应该如何使用它提出建议。

标签: java class variables singleton


【解决方案1】:

是的,没关系。不过,您可能应该将其设为private static final

一般来说,单例存在问题;类接受它所依赖的东西作为构造函数参数比类依赖单例更好。

但是很多代码都特别对待日志记录,无论好坏。

【讨论】:

  • 感谢您的澄清。但我不明白为什么它应该是私人的?你能澄清一下吗?
  • 因为类之外的任何东西都不应该关心这个类是如何进行日志记录的。 (始终使用最严格的访问权限;放宽限制比收紧限制更容易。)
  • 如果另一个类扩展了这个类,保护它可能没问题?
  • 是的,可以。 (尽管那时我肯定会把它定为最终的,只是为了明确表示没有扩展类可以改变它。)
  • 是的。 final static 是标准的。谢谢!
【解决方案2】:

是的,这是完全可以接受的,大多数人会认为这是使用 Logger 类的正确方法。这是另一个堆栈溢出答案,可以更好地解释它:

https://stackoverflow.com/a/4085524/2016771

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    相关资源
    最近更新 更多