Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中高效的参数传入方法_Java - Fatal编程技术网

java中高效的参数传入方法

java中高效的参数传入方法,java,Java,我有一个这样的方法签名 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 你能建议哪一个更好地实现

我有一个这样的方法签名

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


你能建议哪一个更好地实现性能吗

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

calculateFinalInvoice(InvoiceDO invoiceDO, int args...) {
}

您可以简单地传递int数组

calculateFinalInvoice(int[] values, InvoiceDO invoiceDO) { }

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

public void calcualteFinalInvoices(int [] invoices, InvoiceDO action){
  //...
}

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

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


如果你想得到关于修复你的设计的建议,可以问其他问题,解释你想做什么。我相信社区可以帮助你改进你的设计

我敢给你一个更面向对象、更具可读性的方法

您的代码示例类似于调用
trim(“我的字符串”)
,而不是
“我的字符串”.trim()
。这是一种过程编程,其中代码处理被动数据(
trim
处理
“我的字符串”
)。在OOP中,我们改为向对象发送消息以满足请求,如
中的“我的字符串”.trim()”

因此,备选方案将
Invoice
识别为一个可以询问其值或内容的概念。然后,我们使用and来获得最可读、最可维护的程序。如果不同的变量具有特殊含义,您可以使用特定版本的
add
来装饰
Invoice
类,如
addBalanc>e
等等

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;
    }
}

是否总是
a到i
数量的参数?多久调用一次?使用类进行代码维护。除非需要,否则不要担心性能。我会执行
calculateFinalInvoice(InvoiceDO InvoiceDO,int…args)
calculateFinalInvoice(InvoiceDO InvoiceDO,ClassOfValues)
”我们应该忘记小效率,比如说97%的时间:过早优化是万恶之源“-唐纳德·克努西利规则很愚蠢。可以找到相关参数的簇,并将它们作为对象传入。然而,任何这样的对象创建都必然比仅仅传递参数慢。亲爱的@Bob Dalgleish,愚蠢的规则帮助。您喜欢接受10个参数的方法吗?他们方便吗?它们容易使用吗?考虑一下这个问题。@Alexer因此,一个构造函数有10个参数,或者对某个新类有10个setter方法调用,而不是对一个方法有10个参数。我同意,愚蠢的规则是愚蠢的……我希望我的服务中有这些规则layer@sorry我不明白你的意思。。传递int数组是否有问题?是的,这也是可行的。它在性能方面是否高效?如果我使用数组,我必须始终记住存储在哪个索引中,哪个值。如果您需要进一步使用MAPI,那么在您可以将值分配给局部变量的方法中使用MAPI是否更好?如果可能存在歧义,请使用MAPI。。虽然我自己更喜欢传递对象,但我发布了这个,因为答案已经发布了:)代码中有一个输入错误。它应该是calculateFinalInvoice(InvoiceDO InvoiceDO,int…args){}
double finalInvoiceValue = new Invoice()
    .add(1)
    .add(2)
    .add(100)
    .value();