如何在java方法中将数组作为参数传递?

use*_*818 11 java arrays parameters methods

码:

Object[] a={ myObject};
someMethod(Object ...arg);
Run Code Online (Sandbox Code Playgroud)

当我尝试:

someMethod ( {myObject} );
Run Code Online (Sandbox Code Playgroud)

我在Eclipse中收到错误.

但当:

someMethod ( a );
Run Code Online (Sandbox Code Playgroud)

一切都好.为何如此区别?谢谢.

And*_*yle 21

因为{ myObject }语法是特殊的语法糖,只有在初始化数组变量时才适用.这是因为它自己的任务缺乏类型信息; 但在赋值的特殊情况下,类型是从变量中完全推断出来的.

在第一个示例中,编译器知道您正在分配a(这是一个Object[]),因此允许使用此语法.在后者中,您没有初始化变量(并且由于Java类型推断的弱点,它甚至不能完全解决参数赋值的上下文).所以它不知道数组应该是什么类型,即使它可以毫不含糊地确定那是你要做的事情(而不是例如声明一个块).

调用

someMethod ( new Object[] { myObject } )
Run Code Online (Sandbox Code Playgroud)

如果你想在不使用变量的情况下就地定义数组,它会起作用.


虽然上面的问题回答了你的问题,但我注意到你调用的方法是varargs而不是明确要求数组参数.所以在这种情况下你可以简单地打电话

someMethod(myObject);
Run Code Online (Sandbox Code Playgroud)


小智 6

someMethod(new Object[] { "" });
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩!