java - 可以使用数组调用具有任意数量参数的方法吗?

标签 java methods parameters call

我想调用一个签名为的方法

public void foo(Object object, Object ... objects) { }

我这样调用它

Object[] objects = ...;
foo(objects);

因为编译器没有提示它似乎有效,但是 签名中的第一个参数会发生什么?是objects[0]

谁能解释一下 Object ... objects 参数,内部发生了什么?

我无法更改方法,它来自 Method 类。

最佳答案

Varargs 实际上是一种描述数组的不同语法,所以原则上是的。但是由于您显式定义了第一个参数,因此您必须单独传递它。

vargs 的问题是您也无法传递任何参数,即长度为 0 的数组。这可能就是为什么您想显式声明第一个参数的原因,IMO 没问题。你只是不能按照你想要的方式来调用它。

使用您的方法签名,以下应该有效:

foo("first");
foo("first", "second", "third");
foo("first", new String[]{"second", "third"} );

您定义的问题,即使用 Object 是因为数组也是对象,所以您上面描述的调用基本上类似于 foo("first")

编辑:

因为您提到的方法是 Method.invoke(Object object, Object ... objects) 很明显为什么有 2 个参数。第一个是执行目标,即应该调用该方法的实例,而第二个是参数数组。

可以将该签名重写为 Method.invoke(Object object, Object[] objects) 但是在不首先创建数组(即使长度为 0)的情况下调用它会更尴尬,或者你会需要另一种只接受一个参数的方法才能调用无参数方法。

关于java - 可以使用数组调用具有任意数量参数的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36031878/

相关文章:

java - Firebase 中的嵌套列表

c++ - 这个递归方法不应该一到return就结束了吗?

java - MobileFirst 7.1 在生产服务器上获取 "No negotiable cipher suite"- 在 Dev 上运行良好

java - Hybris 5 trail,入门

android - 如何在 Android 开发中停止线程中具有 sleep 方法的线程

c++ - 为什么参数包扩展在不同的 C++ 编译器中的工作方式不同?

c - 具有 0 个命令行参数的简单程序段错误

optimization - 使用AI技术优化参数

启用 Jacoco 时,具有默认方法的 Java 8 接口(interface)不起作用

javascript - 如何解决 float 计算