Methods 方法命名:包含或排除具有多个相似方法的参数类型

Methods 方法命名:包含或排除具有多个相似方法的参数类型,methods,naming-conventions,method-names,Methods,Naming Conventions,Method Names,当遇到一个类,该类有多个类似的方法在不同的参数类型上运行时,您是在方法名称中包含对参数的某种描述,还是保持名称不变并相信参数本身提供了足够的信息?对比下面给出的两个示例: interface Option1 { update(ObjectA); update(ObjectB); update(List<Object>); } interface Option2 { updateA(ObjectA); updateB(ObjectB);

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

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

interface Option2 {
    updateA(ObjectA);
    updateB(ObjectB);
    updateAll(List<Object>);
}
接口选项1{
更新(对象a);
更新(ObjectB);
更新(名单);
}
接口选项2{
更新a(对象a);
updateB(ObjectB);
更新(列表);
}
我听到了以下论点:

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

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

对于处理对象层次结构,请选择选项1

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


我的2美分。:)

视情况而定。方法重载的存在是因为它很有用。然而,它也会给你带来悲伤

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

  • 这些方法解决了不同的问题吗
  • 可读性是否会受损——读者是否能够分辨出调用的是哪个方法
  • 您的接口是否可能与具有类似方法名称的其他接口混合在一起
  • 参数是否可能实现多个参数类型?如果是这样,可能会产生歧义,编译器可能会要求您解决它
例如:

  • Java的
    String.indexOf()
    重载。所有重载都有相同的意图。叶类中不会混合其他indexOf()方法
  • setX()方法通常不是全部命名为
    set()
    ——以上所有问题都可以回答“是”

谢谢,我认为除了第二点之外,你所有的观点都非常直截了当。您将如何决定可读性是否会受损?如果我能回到更新示例,它可能会也可能不会-它似乎很大程度上取决于调用类。它还很大程度上取决于可能实现接口的具体类集,以及可能实现参数的具体类集。给定的方法o.update(A)和o.update(B),由o.update(x)调用?它可能是第一个、第二个、都不是或不明确,这取决于o和x的类。附加的参数使它更有趣。