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更好,因为代码更可读,更易于维护
我的2美分。:) 视情况而定。方法重载的存在是因为它很有用。然而,它也会给你带来悲伤 如果您正在考虑过载,请考虑:
- 这些方法解决了不同的问题吗李>
- 可读性是否会受损——读者是否能够分辨出调用的是哪个方法
- 您的接口是否可能与具有类似方法名称的其他接口混合在一起
- 参数是否可能实现多个参数类型?如果是这样,可能会产生歧义,编译器可能会要求您解决它
- Java的
重载。所有重载都有相同的意图。叶类中不会混合其他indexOf()方法李>String.indexOf()
- setX()方法通常不是全部命名为
——以上所有问题都可以回答“是”set()