我在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为您的贡献。
答案 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});
}
}