【问题标题】:Class constructor or static object-returning method?类构造函数还是静态对象返回方法?
【发布时间】:2018-06-13 09:39:47
【问题描述】:

好奇心让我问了这个问题。我想知道用什么来实例化一个类更好。

我可以使用构造函数来做到这一点:

public ExampleClass(someParameters){}

,或者我可以使用公共静态方法来做到这一点:

public static ExampleClass getInstance(someParameters){return new ExampleClass}

我个人喜欢使用静态方法来实例化一个类,因为这样实例化一个类看起来更简洁。但是,我真的很感谢对此的一些支持意见,因为我只是一个想要编写更专业的代码的爱好者。

【问题讨论】:

  • 请注意,您的第二个示例无法编译。它需要一个返回类型和方法名。
  • 使用静态方法,您可以选择返回现有对象或子类型的对象。这就是为什么工厂方法是一种非常常见的模式。
  • “因为它看起来更干净” - whaaat?您希望在实例化类时不看到 new 关键字?
  • 它会编译,因为我返回一个 ExampleClass 的对象..
  • 看起来您已经看到了单例设计模式的实现。为什么你想让ctor是静态的?请查看stackoverflow.com/questions/7780406/…并与您的问题进行比较

标签: java class object constructor


【解决方案1】:

所以你的问题是你应该使用静态工厂方法吗?在适当的时候使用它们。例如,它们可以具有ofcreate 等名称。因此它们可以被命名(与必须与类同名的构造函数不同)。

然后你可以返回一个子类型,或者缓存一个对象——你不能用一个普通的构造函数来做到这一点。

【讨论】:

    【解决方案2】:

    在 Effective Java 一书中,Joshua Block 争辩说,使用静态工厂方法来创建对象比使用普通的旧构造函数更好。优点包括

    1. 与构造函数不同,它们有名称

    2. 与构造函数不同,它们不需要在每次调用时都创建一个新对象

    3. 与构造函数不同,它们可以返回其任何子类型的对象 返回类型

    4. 它们减少了创建参数化类型实例的详细程度

    缺点:

    1. 它们不能用于子类构造
    2. 它们不易与其他静态方法区分开来

    【讨论】:

    • 我不知道为什么一年后我会看到这个,但感谢您的回答,它真的很有帮助。
    猜你喜欢
    • 2021-11-08
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 2013-07-10
    • 2011-05-28
    • 2020-11-03
    • 1970-01-01
    • 2011-06-04
    相关资源
    最近更新 更多