-2

我对 java 中的 ... 参数有疑问。这是代码示例

class Foo{

    private void m1(Object... params){
        //do something with params[0]
        //do something with params[1]
        //do something with params[2]
        //do something with params[3]
    }

    public void m2(Object... params){
        Object additionalParam = new Object();
        m1(additionalParam, params);
    }

}
class Example{

    public void main(String[] args){
        Foo f = new Foo();
        Object o1 = new Object();
        Object o2 = new Object();
        Object o3 = new Object();
        f.m2(o1, o2, o3);
    }
}

这样的事情有用吗?我没有收到编译器错误,但是在执行类似操作时,我在将其中一个对象的值从m1().


解决方案:我认为阵列会变平,但显然这不会发生。

class Foo{

    private void m1(Object... params){
        //do something with params[0]
        //do something with params[1][0]
        //do something with params[1][1]
        //do something with params[1][2]
    }

    public void m2(Object... params){
        Object additionalParam = new Object();
        m1(additionalParam, params);
    }

}
class Example{

    public void main(String[] args){
        Foo f = new Foo();
        Object o1 = new Object();
        Object o2 = new Object();
        Object o3 = new Object();
        f.m2(o1, o2, o3);
    }
}

谢谢,Sibbo 的贡献。

4

3 回答 3

1

您将两个参数传递给m1. 一个是Object(A),一个是Object[](B)。要访问 A,您可以使用params[0],但要访问 B 中的任何元素i,您需要使用params[1][i]

因此,如果您期望生成的数组会被展平,不,它不会。

如果要更改存储在main方法中传递的数组中的值,只需像在第二个示例中所做的那样进行操作。如果您想做得很好,请使用正确的类型而不是Object.

于 2015-04-08T13:51:49.963 回答
0

(TYPE... NAME) 参数简单地说“传入许多类型为 TYPE 的对象”。然后可以通过 NAME[x] 定期访问这些,其中 x 是您传入的对象的索引。

编辑:我回答的第二部分是错误的。很抱歉有任何混淆。

于 2015-04-08T13:50:23.120 回答
0

Varargs 参数被编译器视为一个数组。因此,您的示例必须如下所示:

class Foo{

    private void m1(Object... params){
        //do something
    }

    public void m2(Object... params){
        Object additionalParam = new Object();
        Object[] newArray = /* Here you need to create an array with all param elements and the new one*/
        m2(newArray);
    }

}
class Example{

    public int main(String[] args){
        Foo f = new Foo();
        Object o1 = new Object();
        Object o2 = new Object();
        Object o3 = new Object();
        f.m2(new Object[]{o1, o2, o3});
    }
}
于 2015-04-08T13:52:07.390 回答