方法命名:使用多个类似方法包含或排除参数类型

时间:2011-02-01 08:48:23

标签: methods naming-conventions method-names

当面对具有多个类似方法的类在不同的参数类型上运行时,您是否在方法名称中包含某种参数描述,或者您是否保持名称相同并相信参数本身提供的足够信息?对比下面给出的两个例子:

interface Option1 {
    update(ObjectA);
    update(ObjectB);
    update(List<Object>);
}

interface Option2 {
    updateA(ObjectA);
    updateB(ObjectB);
    updateAll(List<Object>);
}

我听到了以下论点:

  • 选项1更好,因为它不包含冗余信息
  • 选项2更好,因为代码更易读,更易于维护

2 个答案:

答案 0 :(得分:1)

这取决于。存在方法重载是因为它很有用。但是,它也会让你感到悲伤。

如果您正在考虑超载,请考虑:

  • 这些方法是否解决了不同的问题?
  • 是否会损害可读性 - 读者能否知道正在调用哪种方法?
  • 您的界面是否可能与具有类似方法名称的其他人混在一起?
  • 参数是否可能实现多个参数类型?如果是这样,可能会导致歧义,编译器可能会要求您解决它。

例如:

  • Java String.indexOf()已超载。所有的重载都有相同的意图。将没有额外的indexOf()方法混合到叶类中。
  • setX()方法通常所有名为set() - 所有上述问题都可以回答“是”。

答案 1 :(得分:0)

对于支持方法重载的静态类型语言,选项1。

用于处理对象层次结构,选项1。

对于所有其他情况,我建议选项2。

我的2美分。 :)