在Java中使用...参数

时间:2015-04-08 13:46:30

标签: java method-parameters

我在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为您的贡献。

3 个答案:

答案 0 :(得分:1)

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

因此,如果您期望得到的数组将被展平,不会,那就不会。

如果你想改变你在main方法中传递的数组中存储的值,就像你在第二个例子中那样做。如果您想要做得很好,请使用正确的类型而不是Object

答案 1 :(得分:0)

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

编辑:我的答案的第二部分是错误的。对于任何混乱感到抱歉。

答案 2 :(得分:0)

Varargs params被编译器视为一个数组。所以你的例子必须是这样的:

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});
    }
}