【问题标题】:Function Overloading: Terminology for different types of overloaded functions?函数重载:不同类型的重载函数的术语?
【发布时间】:2017-01-24 21:29:47
【问题描述】:

例如,假设我有这 3 个重载函数:

/** Function #1 */
public static String add(List<String> operands)
{
    return add(operands, 10);
}

/** Function #2 */
public static String add(List<String> operands, int base)
{

    return Integer.toString(add(Integer.parseInt(operands.remove(0), base),operands, base), base);
}

/** Function #3 */
private static int add(int result, List<String> operands, int base)
{
    if(operands.size() == 0)
    {
        return result;
    }

    result += Integer.parseInt(operands.remove(0), base);

    return add(result, operands, base);
}

在这种情况下调用函数 #2 是否正确,因为函数 #1 调用了函数 #1 的“父”重载函数并且两者都是公共的?

将函数 #3 称为这些函数的“递归”函数是否也是正确的,或者是否有另一个术语来描述它被公共函数调用为递归调用自身的隐藏函数这一事实?

我知道这些不是正确的术语,但我想了解的是,考虑到它们的作用,不同类型的重载函数是否有固定的术语。

【问题讨论】:

  • 旁注:java中的函数应该是camelCase。
  • 如果一个方法是 public 并且是您 API 的一部分,那么您应该期望它可能会被使用。
  • @Ahmad 谢谢,已更正。每天从 C# 切换到 Java 有时会变得很忙。
  • 有趣的问题;但我不知道每个人都会在这里同意的任何“事实上的”条款。我认为你说的这三种方法之间存在一定的关系是正确的;但是AFAIK这些概念“未命名”。所以从这个意义上说,就像感觉一样有趣;我的感觉是,这个问题是“征求意见”的“边界线”。

标签: java function methods overloading terminology


【解决方案1】:

我不愿意定义 Java 语言规范没有定义的任何术语。

简单地说你有 3 个函数,2 个 public 和 1 个 private。它们具有相同的名称,但参数类型不同,因此它们是重载

确实,一个调用自身的函数是一个递归函数。 JLS 确实定义了该术语,因为 Java 编译器必须支持调用自身的函数。

不要将您的某个函数称为“父级重载”——它并不是特别有用,而且您对“抽象”一词的使用是特殊的。

【讨论】:

  • “特质”是我今天的关键词
  • 明天的“floccinaucinihilipilification”怎么样? (英国议会有史以来最长的一句话)。
  • 我一直试图在我的呼吸下发音几分钟。我的同事可能会认为我现在是个疯子。
  • 我倾向于说“Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo”!
  • @Bathsheba 谢谢。我的目标是查看在我的另一个项目的代码的注释文档中是否有一个术语或某种简写方式来解释每个重载函数的作用。但我将把它留给 JLS,以便大家都能理解。
【解决方案2】:

对于这种情况,我没有具体的术语;然而,有一种用于构造函数的模式与此有些相似。 “伸缩构造器模式”和使用“构建器模式”不是直接相同,而是一种相同的想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多