将对象作为参数而不是将单独的变量传递给函数是一种好习惯吗?

时间:2019-03-13 13:28:29

标签: java

将对象作为参数而不是单独的变量传递是一种好习惯。我下面有一个课程。与其将单独的参数传递给 calc 函数,不如创建一个名为 CalcFields 的对象并将z,l,y,产品,用户和代码存储在其中,以及将该对象传递给calc函数。我担心的是,这个参数列表可能会在将来增长,比如说还需要再传递5个字段

Class ABC{
   private test(Order o){
     String z = //some logic to evaluate z
     String y = // some logic to evaluate y
     int p = calc(z, y, o.getProduct(), o.getUser(), o.getCode())
   }
}


Class Calculate{
  public int calc(String a, String b, Product a, User b, String d){
     ..........
    }
}

2 个答案:

答案 0 :(得分:0)

答案是肯定的,特别是在Java中,通过引用提供参数的唯一方法是使用对象并调用其方法。

通过引用的参数表示函数可以在被调用函数的范围之外更改变量的值。如果不使用对象,则这些参数始终按值发送,这意味着仅值的副本发送到函数/方法,并且函数调用中使用的变量不会更改。

enter image description here image source

两者在编程中都很重要,这仅取决于您的函数应该执行的操作。

此外,在函数调用中将对象用作参数会封装始终相关的数据。


也就是说,良好的类设计将避免将对象进行过分的分组(位于引擎中引擎活塞中的螺钉 仓库中的汽车可能与汽车销售商的库存申请无关。优先选择最低限度的最低要求,但不要害怕使一个对象也可以容纳另一个对象。不存在完美的平衡,但是不平衡balance。在您的情况下,这不是问题,只是要牢记这一点。最终目标是编写尽可能少的可读代码

我在设计中看到的一个问题是,您正在破坏对象以操纵对象外部的数据。要想打破另一个对象内的一个对象的冲动,而宁愿在第一个对象内声明一个方法以从第二个对象中调用它。

在您的示例中,最好直接从calc对象调用order并根据需要添加参数。

Class ABC{
   private test(Order o){
     String z = //some logic to evaluate z
     String y = // some logic to evaluate y
     int p = o.calc(z, y)
   }
}


Class Order {
  public int calc(String a, String b){
        //Product, User and your code are already stored in this object anyways
    }
}

答案 1 :(得分:0)

取决于,如果只调用这样的函数:calc(z, y, o.getProduct(), o.getUser(), o.getCode()),则没有5个参数的意义,应该只使用3个参数并传递整个o对象。

另一方面,如果您也想传递不同的参数,例如calc(z, y, o.getProduct(), o.getUser(), "anotherString"),则最佳实践是使用这样的方法:

public int calc(String a, String b, ABC c) {
    return this.calc(a, b, c.getProduct(), c.getUser(), c.getCode());
}

public int calc(String a, String b, Product a, User b, String d) {
     //do the calculation here
}

第一个功能提供了仅传递一个参数的便利,而第二个功能则提供了传递不同参数的灵活性。

相关问题