码:
Object[] a={ myObject}; someMethod(Object ...arg);
当我尝试:
someMethod ( {myObject} );
我在Eclipse中收到错误.
但当:
someMethod ( a );
一切都好.
为什么这个差异?
谢谢.
解决方法
因为{myObject}语法是
special syntactic sugar,只适用于初始化数组变量.这是因为自己的作业缺少类型信息;但是在赋值的特殊情况下,类型从变量中完全推断出来.
在第一个例子中,编译器知道你正在分配一个(这是一个Object []),所以这个语法是允许的.在后者中,您不是初始化一个变量(并且由于Java类型推断的弱点,甚至不能完全解决参数分配的上下文).所以它不知道数组应该是什么类型,即使它可以明确地确定这是你想要做的(而不是例如声明一个块).
someMethod ( new Object[] { myObject } )
如果要在不使用变量的情况下就地定义数组就行了.
虽然上面的问题回答了你的问题,我注意到你所调用的方法是varargs而不是明确要求一个数组参数.所以在这种情况下你可以简单地打电话
someMethod(myObject);