Java 如何使用变量参数包装接受对象[]的特定函数
我有一个方法,它采用以下格式的键及其相关参数Java 如何使用变量参数包装接受对象[]的特定函数,java,Java,我有一个方法,它采用以下格式的键及其相关参数 public String foo(String key, Object[] parameters) {..} 我更喜欢使用变量参数格式传递参数。我该怎么做 我尝试了publicstringfoo(stringkey,Object…parameters){..}——但这似乎与上面给出的方法定义相冲突 我是否应该执行以下操作并将其包装到Object[]方法中 public String foo(String key, Object a) {..} p
public String foo(String key, Object[] parameters) {..}
我更喜欢使用变量参数格式传递参数。我该怎么做
我尝试了publicstringfoo(stringkey,Object…parameters){..}
——但这似乎与上面给出的方法定义相冲突
我是否应该执行以下操作并将其包装到Object[]方法中
public String foo(String key, Object a) {..}
public String foo(String key, Object a, Object b) {..}
public String foo(String key, Object a, Object b, Object c) {..}
为该方法指定一个不同的名称:
public String bar(String key, Object... a) {
return foo(key, a);
}
名称应该接近原始名称,可能指定了其存在的原因(但也可以记录在案)。“foo”这个词我再具体不过了:
如果您不能更改现有的方法签名,例如从第三方类继承,当然需要这样做。如果你能改变它-改变它。旧的调用仍然有效。只需将现有函数的定义更改为
public String foo(String key, Object... parameters) {..}
Java中的可变方法机制是在调用站点创建数组并将其传入的语法糖。所以这个方法应该与现有的源代码和编译类兼容
发件人:
final参数类型后的三个句点表示final参数可以作为数组或参数序列传递
公共字符串foo(字符串键,对象[]参数)
和公共字符串foo(字符串键,对象…参数)
是相同的方法,它们的(“类文件”)签名是等效的
如果你有这样的方法
public String foo(String key, Object... parameters) {}
允许进行以下调用:
foo("1", obj1);
foo("2", obj1, obj2);
foo("3", new Object[]{obj1, obj2, obj3});
公共字符串foo(字符串键,对象[]参数){..}
和
公共字符串foo(字符串键,对象…参数){..}
是相等的“…是相同的方法,它们的签名是等价的”呃,真的吗?因此,我可以使用五个参数调用公共字符串foo(字符串键,对象[]参数
):foo(“hi”,“does”,“this”,“really”,“work”)代码>?似乎不太可能。编辑:已测试。不,你不能。你不能两者都有,但它们的签名并不相等。@t.J.克劳德-是和否。。。在字节码级别,签名是相同的-编译器只是添加一些胶水,从参数创建一个对象[]
,并将其传递给方法。这就是我想说的,不完全是。eclipse编译器不喜欢使用varargs调用非varargs方法。