代码:
Object[] a={ myObject};
someMethod(Object ...arg);
当我尝试时:
someMethod ( {myObject} );
我在 Eclipse 中收到错误。
但当:
someMethod ( a );
一切都好。为什么会有这种差异?谢谢。
代码:
Object[] a={ myObject};
someMethod(Object ...arg);
当我尝试时:
someMethod ( {myObject} );
我在 Eclipse 中收到错误。
但当:
someMethod ( a );
一切都好。为什么会有这种差异?谢谢。
因为{ myObject }
语法是特殊的语法糖,仅在初始化数组变量时适用。这是因为赋值本身缺少类型信息;但在赋值的特殊情况下,类型是完全从变量中推断出来的。
在第一个示例中,编译器知道您要分配给a
(这是一个Object[]
),因此允许使用此语法。在后者中,您没有初始化变量(并且由于 Java 类型推断的弱点,它甚至也无法完全计算出参数分配的上下文)。所以它不会知道数组应该是什么类型,即使它可以明确地确定这就是你想要做的(而不是例如声明一个块)。
打电话
someMethod ( new Object[] { myObject } )
如果您想在不使用变量的情况下就地定义数组,则可以使用。
虽然上面回答了您的问题,但我注意到您调用的方法是可变参数,而不是明确需要数组参数。所以在这种情况下,你可以简单地调用
someMethod(myObject);
someMethod(new Object[] { "" });
应该做的伎俩!