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方法。