我使用 java 7,并创建一个 varargs 方法
public class JavaApplicationTest {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
addBundleMessage("b", Integer.SIZE, "key", (Object) null);
}
public static void addBundleMessage(String bundleName, Integer severity, String key, Object... params) {
if (params == null)
System.out.println("params Is null");
else
System.out.println("Params not null");
}
}
如果我不转换对象,IDE Netbeans 或 Eclipse 会抱怨,但它会编译:
最后一个参数类型不精确的 varags 方法的非 varargs 调用
范围
When No cast: 显示参数为空
当我将 null 投射到(Object)它显示参数不为空
当我将 null 投射到(目的[])它显示参数为空
这是正常行为吗?
是的,这是“正常”行为。
混乱来自于稍后将可变参数附加到语言上并使用数组作为“实际参数”来实现以保存可变数量的参数。
public static void addBundleMessage(String bundleName, Integer severity,
String key, Object... params) {
几乎与
public static void addBundleMessage(String bundleName, Integer severity,
String key, Object[] params) {
在底层,参数被包装为 Object[] 传递。
但是,您仍然可以选择自己传递该数组。
如果你使用(Object[]) null
,你得到一个参数(即空)。
如果你使用(Object) null
,它使用了 varargs 方法,因此传入了一个数组来保存参数(其中只有一个为 null)。
对于 varargs 方法的“正常使用”,params
永远不会为空。你能得到的“最糟糕的”是一个空数组(如果根本没有参数)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)