Java - 只有一个类实例:使用静态方法代替?

时间:2017-05-23 03:59:43

标签: java

如果我知道某个特定的类只会在我的程序中被实例化一次,那么为那个特定的类使用静态方法和变量会更好吗?如果没有,如果只有一个该类的实例,那么使用实例方法和变量而不是静态方法会有什么好处呢?

2 个答案:

答案 0 :(得分:4)

这取决于你需要班级做什么,以及将来你可能需要做什么。它还取决于有多少人会看到或使用此代码。如果您只看到并使用此代码,那么选择一个实现并一直遵循它,然后强制自己切换到另一个实现作为练习可能会很有启发性。

假设您的代码将被其他程序员看到或使用:

如果对象是你需要在测试中模仿的东西(比如数据库连接),那么最好让你的方法成为实例方法并找到一些其他策略来确保你只有一个

如果有任何机会,你的课所做的事情可以用另一种方式完成(例如你的班级将你的程序的输出写入excel文件),然后将你的类的实例传递给任何需要它们的方法是一个帮助您提高代码灵活性的好方法(例如,如果您以后决定要生成html输出,那么您只需编写excel编写器的姐妹实现并将其传递给代码)。

如果你几乎100%确定你的代码永远不需要被模仿(也就是“模拟”)并且你永远不需要利用多态性(例如Java中的Math类)那么静态方法可能会没事,但这是一个罕见的案例。

答案 1 :(得分:3)

我们讨论了何时使用singletonstatic方法。之前已在此网站上对此进行了讨论,因此我将在本答案的最后指出。

查看这个的一种方法是询问类是否具有状态,是否需要进行子类化,如何进行测试,单例是否可以在依赖注入框架中使用,即它是否会被注入?

如果上述任何一个答案为“yes”,则最好使用singleton - 如果没有,则可以使用static方法。

然而,这些方法在下面的链接中将更详细地讨论它们应该或不应该使用的原因。

请参阅this了解“为什么单身人士不好”。

请参阅this了解“何时不使用静态方法”。