【问题标题】:Why Java can take multiple parameters but can return only a single object?为什么Java可以接受多个参数但只能返回一个对象?
【发布时间】:2025-12-01 06:05:02
【问题描述】:

为什么 java 被定义为方法可以将多个参数作为输入,
但可能只返回一个对象(或 void)?

它是否让语言更容易实现或使用?

【问题讨论】:

  • 它也没有真正为返回多个参数的有效方法提供任何解决方案。作为记录,如果我希望一个方法能够返回一个参数,我将所需类型的缓存数组(长度为 1)作为参数传递并让它设置第一个字段,或者,您可以返回一个对象数组和使用它,但它是您想要避免的不必要的对象创建。

标签: java history language-design


【解决方案1】:

可能是因为 C 和 C++ 就是这样做的,而 Java 语言的语法非常类似于(并且可能基于)这些语言。

事实上,根据this article,Gosling 是从扩展 C++ 编译器开始的,所以他会遵循大部分相同的语法是有道理的:

为了使开发过程更加独立于平台(从而满足消费者市场对 CPU 灵活性的需求),Gosling 从扩展 C++ 编译器开始。

【讨论】:

    【解决方案2】:

    也许目的是将多个返回值封装在一个对象中?

    【讨论】:

      【解决方案3】:

      我不确定,但我认为 Java 的执行方式与任何其他基于堆栈的运行时一样。这意味着将项目作为参数传递给方法很容易,只需在将控制权转移到方法之前将它们推入堆栈即可。返回值可能像 C 和 C++ 一样在 VM 中处理 - 返回值始终放在寄存器中,该寄存器本质上是单值的。

      不过,这不是什么大问题,因为使用泛型,可以通过返回 Tuple<type1, type2, type3> 之类的实例以类型安全的方式处理返回多个值,这在大多数情况下并不是太大的负担案例。

      【讨论】:

        【解决方案4】:

        我的猜测是约定俗成的:这就是主要的 OO 语言所做/所做的,Java 也是如此。然而,官方的论点可能与关于闭包的论点相同——不要包含那些会混淆普通任务和非真正需要的任务的标准语法的东西。或者他们认为单个方法应该返回一组应该/可以进入对象的相关值。或者他们只是没有想到/没有时间(相当标准的开发人员票价)。

        在相关说明中,我发现了使用闭包模拟多个返回的讨论: http://weblogs.java.net/blog/brucechapman/archive/2007/11/closures_and_mu.html

        【讨论】:

          最近更新 更多