2013-03-15 50 views
1

我经常发现自己在那里我有一个这样的方法签名情况:在Java中重载方法时,您在哪里计算附加参数数据?

public returnType doStuff(mandatoryParam, calculableParam1, calculableParam2); 

在这种情况下,我有时候想支持这些不同的方法签名:

public returnType doStuff(mandatoryParam); 
public returnType doStuff(mandatory, calculable1); 
public returnType doStuff(mandatory, calculable2); 
public returnType doStuff(mandator, calculable1, calculable2); 

在做超载这样的,是否更好地让超载传递给基本方法是这样的:

public returnType doStuff(mandatoryParam){ 
    doStuff(mandotryParam, null, null) 
} 

public returnType doSTuff(mandatoryParam, calculable1, calculable2){ 
    if(null == calculable1){ 
     calculable1 = calculate(); 
    } 
    . 
    . 
    . 
} 

或者是计算更好吗? e可计算参数,然后将它们传递给像这样的基本方法:

public returnType doStuff(mandatoryParam){ 
    Calculable calc1 = figureItOut1(); 
    Calculable calc2 = figureItOut2(); 
    doStuff(mandotryParam, calc1, calc2); 
} 
+2

这取决于。你是否想要更长的重载支持空引用,默认方式与其他引用相同? – 2013-03-15 22:04:34

+0

此外,你绝对的意思是超载,而不是按照你的头衔重写。 – 2013-03-15 22:06:23

+0

确实。我绝对意味着超载。错字 – David 2013-03-15 22:10:54

回答

2

我会选择第二种方法。第一种方法提供了更多的方法来做同样的事情,这是API中冗余的一个指示。

在某些情况下,有太多的参数应该有默认值,提供所有重载版本是不切实际的,而且对用户来说也不会有什么好处。然后应该只有一个基本方法接受空参数作为参数的默认值。