代码之家  ›  专栏  ›  技术社区  ›  Jeremy Goodell

方法重载标准协议?

  •  1
  • Jeremy Goodell  · 技术社区  · 15 年前

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

    在我看来,额外的方法调用将是您不需要的开销,因此您希望所有方法直接调用实现的方法。

    我想知道是否有人知道 “标准推荐方式” 做这个,或者是更个人的偏好,或者取决于上下文。当我向现有的重载方法添加新的签名时,我总是想知道这一点。你几乎总是可以选择用哪种方式来做。

    可悲的愚蠢例子:

    现有方法:

    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,"",""));
    }
    

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

    是的,我知道最后的方法本质上是一个否定的。

    2 回复  |  直到 13 年前
        1
  •  2
  •   vulkanino    15 年前

    如果可能的话,我更喜欢创建一个私有方法,所有其他重载程序都会调用该方法。

    private String _concatenateBase(String one, String two) 
    {
        return one + two;
    }
    
    
    public String concatenate(String one, String two, String three) 
    {
        return _concatenateBase(one+two, three);
    }
    
        2
  •  1
  •   Jon Skeet    15 年前

    我愿意 通常 使用更少参数进行重载调用使用更多参数进行重载,填充默认值。我怀疑我通常会尽量避免复制默认值,所以我会让你的第三个变体调用第二个,这会调用第一个。但是,这完全取决于具体情况。在某些情况下,性能将是一个重要因素,尽管通常可读性更为重要。在大多数情况下,我怀疑 非常 可读性差异很大,特别是在默认值很简单的情况下。

    当然,在某些情况下,重载不是以这种线性方式构造的:可能有几个重载都调用同一个“核心”重载,但如果它们提供不同的参数,则它们不能彼此调用。

    推荐文章