0

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

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

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

我听过以下论点:

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

2 回答 2

1

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

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

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

例如:

  • JavaString.indexOf()是重载的。所有的重载都有相同的意图。叶类中不会混入额外的 indexOf() 方法。
  • setX() 方法通常不会全部命名set()——上述所有问题都可以回答“是”。
于 2011-02-01T15:55:33.603 回答
0

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

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

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

我的 2 美分。:)

于 2011-02-01T09:11:37.250 回答