方法重载标准协议?

时间:2010-09-01 16:38:57

标签: java overloading

如果为方法添加第三个签名,是否会让第二个和第三个变体直接调用第一个(实现的变体),或者第三个调用是第二个,第二个调用第一个。

在我看来,额外的方法调用将是您没有的开销,所以您希望所有方法直接调用实现的方法。

我想知道是否有人知道这样做的任何“标准推荐方式”,或者它是更个人偏好还是取决于背景。当我向现有的重载方法添加新签名时,我总是想知道它。你几乎总是可以选择采用哪种方式。

Pathetically Stupid示例:

现有方法:

public String concatenate(String one, String two, String three) {
    return(one+two+three);
}

public String concatenate(String one, String two) {
    return(concatenate(one, two, ""));
}

要添加下一个,我该做:

public String concatenate(String one) {
    return(concatenate(one,"",""));
}

OR

public String concatenate(String one) {
    return(concatenate(one,""));
}

是的,我知道最后的方法基本上是无操作。

2 个答案:

答案 0 :(得分:2)

我希望在可能的情况下创建一个其他所有上传程序调用的私有方法。

private String _concatenateBase(String one, String two) 
{
    return one + two;
}


public String concatenate(String one, String two, String three) 
{
    return _concatenateBase(one+two, three);
}

答案 1 :(得分:1)

我会通常使用更少的参数调用重载来调用带有更多参数的重载,填充默认值。我怀疑我通常会尽量避免重复默认值,因此我会将第三个变体调用为第二个,这将调用第一个。但是,这绝对取决于具体情况。在某些情况下,性能将是一个重要因素,尽管通常可读性更为重要。在大多数情况下,我怀疑非常在可读性方面存在很大差异,特别是如果默认值很简单。

当然,在某些情况下,重载不是以这种线性方式构造的:可能存在多个重载,它们都称为相同的“核心”重载,但如果它们提供不同的参数则不能相互调用