【问题标题】:Does passing param to constructor better than to static method [closed]将参数传递给构造函数是否比传递给静态方法更好[关闭]
【发布时间】:2017-12-14 14:54:27
【问题描述】:

假设我有一个类示例:

public class Example(){
    public static String method1(String param){...}
    public static String method2(String param){...}
}

如果我的客户想同时调用这两种方法:他们会这样做:

String param = "Hello";
String result = Example.method1(param);
...
String result2 = Example.method2(param);

现在问题来了,如果我们在 Example 类的构造函数中传递参数并在没有任何参数的情况下调用这两个方法,那么这段代码是否会更好,如下所示:

 public class Example(){
     String param;
     public Example(String param){
         this.param = param
     }
     public String method1(){...}
     public tring method2(){...}
 }

客户只需调用:

Example example = new Example("Hello");
String result = example.method1();
String result2 = example.method2();

我想知道第二个是否比第一个好。因为在我看来,当我们不需要传递多个输入参数时,第二个更 OOP 并且更易于使用? 谁能给我一个建议?

【问题讨论】:

  • 我想这取决于你的代码的用途。
  • 如果Example 只有这两种方法,并且这些方法总是使用相同的参数调用,那么它可能是有意义的
  • 如果 param 是一个对创建的对象很重要的常量值,则在构造函数中传递它。如果任何 methodX() 调用可能不同,则它是一个参数。
  • 您需要能够new Example("foo").method1(); new Example("bar").method2();吗?如果是这样,那么实例没有意义。实例不仅用于存储变量,还用于表示实体。

标签: java oop constructor static


【解决方案1】:

第二种方法更好地确保两次调用之间param的一致性,因为param的值在构造函数中设置了一次,之后就不会改变。

第一种方法(使用两个静态方法)让您可以灵活地在两个调用之间切换 param 的值。

第二种方法可以保护您免受这种情况的影响(假设将不同的param 传递给一系列调用中的方法是错误的)。

【讨论】:

    【解决方案2】:

    取决于您的方法正在做什么以及您的代码要求是什么。假设您想要一个可用于这两种方法的 String 变量,您可以在构造函数中进行初始化。但是,由于您拥有与 Object 而非类密切相关的静态方法,并且它们可以对来自不同类的不同输入进行操作,因此具有参数化的静态方法也不错。

    最后,这一切都取决于您的案例和代码功能。

    【讨论】:

      猜你喜欢
      • 2019-04-25
      • 2013-12-23
      • 2012-02-21
      • 2016-03-17
      • 2014-09-10
      • 1970-01-01
      • 2020-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多