代码:
Object[] a={ myObject};
someMethod(Object ...arg);
当我尝试:
someMethod ( {myObject} );
我在Eclipse中收到错误。
但是:
someMethod ( a );
一切都好。
为何如此区别?
感谢。
答案 0 :(得分:21)
因为{ myObject }
语法是special syntactic sugar,只有在初始化数组变量时才适用。这是因为它自己的任务缺乏类型信息;但在赋值的特殊情况下,类型是从变量中完全推断出来的。
在第一个示例中,编译器知道您正在分配给a
(Object[]
),因此允许使用此语法。在后者中,您没有初始化变量(并且由于Java类型推断的弱点,它甚至不能完全解决参数赋值的上下文)。所以它不知道数组应该是什么类型,即使它可以毫不含糊地确定你正在尝试做的事情(而不是例如声明一个块)。
调用
someMethod ( new Object[] { myObject } )
如果你想在不使用变量的情况下就地定义数组,就可以了。
虽然上面的问题回答了您的问题,但我注意到您调用的方法是varargs,而不是明确要求数组参数。所以在这种情况下你可以简单地调用
someMethod(myObject);
答案 1 :(得分:6)
someMethod(new Object[] { "" });
应该做的伎俩!