你如何使用变量参数来包装某个函数来获取Object []

时间:2010-12-20 09:22:02

标签: java

我有一个方法,它采用以下格式获取密钥及其相关参数。

public String foo(String key, Object[] parameters) {..}

我更喜欢使用可变参数格式传递参数。我该怎么做?

我试过public String foo(String key, 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) {..}

4 个答案:

答案 0 :(得分:6)

只需将现有功能的定义更改为

即可
public String foo(String key, Object... parameters) {..}

Java中的可变方法机制是用于在调用站点创建数组并将其传入的语法糖。因此,此方法应与现有源代码编译类兼容。

来自the Java documentation on varargs

  

最终参数类型之后的三个句点表示最终参数可以作为数组作为参数序列传递。

答案 1 :(得分:2)

为方法指定一个不同的名称:

public String bar(String key, Object... a) {
    return foo(key, a);
}

名称应该接近原始名称,可能指明其存在的原因(但也可以记录)。我不能更具体地说“foo”:)

如果您无法更改现有方法签名,例如从第3方类继承,则当然需要。如果你可以改变它 - 改变它。旧的调用仍然有效。

答案 2 :(得分:2)

public String foo(String key, Object[] parameters)public String foo(String key, Object... parameters)是相同的方法,它们的(“类文件”)签名是等效的。

如果你有像

这样的方法
public String foo(String key, Object... parameters) {}

允许以下通话:

foo("1", obj1);
foo("2", obj1, obj2);
foo("3", new Object[]{obj1, obj2, obj3});

答案 3 :(得分:1)

public String foo(String key, Object[] parameters) {..}

public String foo(String key, Object... parameters) {..}相等