5

我有这样的方法签名。

public void calculateFinalInvoice(int a, int b, int c, int d, int e, int f, int g, int h, int i, InvoiceDO invoiceDO ) {
     // TO DO

}

我正在传递一些参数。那么,以性能方式传递所有这些参数会更好吗?或者 1) 为所有这些参数维护一个类 2) 为所有这些参数维护 HashMap 3) 为此维护一个 ArrayList。

您能否建议哪一个更好地实现性能。

4

5 回答 5

2

您使用的是什么版本的 Java?你在用这些参数做什么。您最好将 DAO 移动到参数列表的前面,然后使用varargs它传递int您想要的任意数量的 s:

calculateFinalInvoice(InvoiceDO invoiceDO, int args...) {
}
于 2013-05-24T17:37:07.187 回答
1

不要担心此类事情的微观管理效率。代码清晰,完成编码后,如果需要,请担心效率。在这种情况下,您可能需要重新考虑您的设计并为您的代码创建更多结构。例如,您可能想要使用数组:

public void calcualteFinalInvoices(int [] invoices, InvoiceDO action){
  //...
}
于 2013-05-24T17:39:04.147 回答
1

我敢给你一个更面向对象、更易读的方法。

您的代码示例类似于调用trim("my string")而不是"my string".trim(). 这是过程编程,其中代码处理被动数据(trim工作"my string")。在 OOP 中,我们改为向对象发送消息以完成请求,例如在"my string".trim()".

因此,备选方案标识Invoice为可以询问其价值或内容的概念。然后,我们使用方法链接封装来为您提供最易读、最可维护的程序。如果不同的变量有特殊的含义,可以Invoice用特定版本的add,like 等来装饰类addBalance

class Invoice {
    private final List<Integer> values = new ArrayList<Integer>();

    public Invoice add(int value) {
        values.add(value);
        return this;
    }

    public double value() {
        // Use the values to compute the final invoice.
        return computedFinalInvoice;
    }
}

像这样使用:

double finalInvoiceValue = new Invoice()
    .add(1)
    .add(2)
    .add(100)
    .value();
于 2013-05-24T17:42:44.037 回答
0

您可以简单地传递 int 数组

calculateFinalInvoice(int[] values, InvoiceDO invoiceDO) { }
于 2013-05-24T17:38:40.750 回答
0

忘记性能。这不是问题。问题在于,正如工程师的公式不能超过 1 英寸,该方法不应获得超过 3 个参数。如果您需要更多,请更改您的设计。

您可能应该创建特殊的参数类并将其实例传递给方法。或者将方法放到不同的类中,将一些数据存储为实例字段......

如果您想就修复您的设计提出建议,请询问其他问题,说明您要做什么。我相信社区可以帮助您改进设计。

于 2013-05-24T17:39:30.587 回答