当前位置: 首页 > 面试题库 >

为什么varargs应该是方法签名中的最后一个?

梁盛
2023-03-14
问题内容

如果我尝试编写如下方法

public void someStuff(Object ... args, String a )

我得到这个错误

方法someStuff的可变参数类型Object必须是最后一个参数。

我不完全了解变量参数类型的要求是最后一项。任何输入都会有所帮助。


问题答案:

它遵循C约定。C约定反过来基于在堆栈上传递参数的CPU体系结构。第一个non-
vararg自变量以堆栈帧中的固定偏移量结束。如果可以将vararg参数放在首位,则以下参数的堆栈偏移量将取决于您要传递的vararg参数数量。这将大大增加访问它们所需的代码量。

在您的示例中,String a首先,从概念上讲,偏移量为0,与后面的vararg参数的数量无关。但是String a最后,它可能在偏移量args.size * 40、4、8、12 等处-您必须在每次需要时进行计算String a



 类似资料:
  • 问题内容: 我第一次在方法签名中看到它。 我试图访问一个.class文件。它具有如下定义的方法 那个GraphData就是带有getter和setter的POJO。为什么显示.class文件而不是显示? 问题答案: 它是 varargs ,只能在参数列表中最后使用。最后一个参数可以容纳多个对象。 查看“ a”和“ b”如何转换为数组。

  • 问题内容: 在App Engine文档中,此方法签名中的省略号()是什么? 这三个点的作用是什么? 问题答案: 这些是Java变量。它们使你可以传递任意数量的特定类型的对象(在这种情况下,它们是JID类型)。 在你的示例中,以下函数调用将有效:

  • 我有一个以下程序 我看到方法返回int。那么是如何对Retry类型的对象进行有效分配的?这是如何编译的?幕后发生了什么?

  • 前几天鹅约面了,ieg的游戏安全部门,岗位是手游这块的后台安全策略,想着毕竟是鹅嘛,再见识见识,就去面了,然后噶在了二面。富途这边呢实习结束了,试用期抵掉了,到时候入职就可以没有试用期,公司我也蛮满意,后续极大概率不会再面试了,给大伙贡献最后的面经喵,这是我最后的波纹了!此外富途这边不涉及高压线的问题也可以问捏,鼠鼠尽量回答。 一面 主要拷打实习的内容,然后问了一些场景题,比如有什么办法可以减少被

  • 问题内容: 例如,框架/ JDK中的许多方法可能会抛出 但这未在方法签名中指出(因为这是通常保留给检查异常的做法)。我想证明在方法sigs中声明RuntimeExceptions有很多好处(例如类似于静态类型检查)。我喝醉了还是其他? 问题答案: 我不会在签名中声明未经检查的异常,因为它会误导该API的用户。是否必须显式处理该异常不再明显。 在javadoc中声明它是一种更好的方法,因为它允许某人

  • 问题内容: 我想知道对for循环中的最后一个元素进行特殊处理的最佳方法(更紧凑和“ pythonic”的方法)。有一段代码只应 在 元素 之间 调用,而在最后一个代码中被禁止。 这是我目前的操作方式: 有什么更好的办法吗? 注意:我不希望使用hack之类的东西。 问题答案: 在大多数情况下,使第 一个 迭代成为特殊情况而不是最后一个案例更容易(且更便宜): 这将适用于任何迭代过程,即使对于那些没有