当我用Java编写构造函数时:
import java.io.IOException;
import java.io.OutputStream;
public class MultiOutputStream extends OutputStream{
OutputStream[] oStream;
public MultiOutputStream(OutputStream oStream) {
this.oStream = oStream;
// TODO Auto-generated constructor stub
}
@Override
public void write(int arg0) throws IOException {
// TODO Auto-generated method stub
}
}
Eclipse现在说:类型不匹配:无法从OutputStream转换为OutputStream [] 。所以Eclipse修正了我的构造函数:
import java.io.IOException;
import java.io.OutputStream;
public class MultiOutputStream extends OutputStream{
OutputStream[] oStream;
public MultiOutputStream(OutputStream... oStream) {
this.oStream = oStream;
// TODO Auto-generated constructor stub
}
@Override
public void write(int arg0) throws IOException {
// TODO Auto-generated method stub
}
}
这些观点代表什么?
提前致谢!
答案 0 :(得分:6)
他们被称为“varargs”,见http://docs.oracle.com/javase/7/docs/technotes/guides/language/varargs.html。
最终参数类型后的三个句点表示 final参数可以作为数组或序列传递 参数。
答案 1 :(得分:3)
它是一种名为 varargs 的语法糖。
public void method(int... varargs) { }
您可以使用多个参数调用此方法,例如:method(3, 14)
,还有method(42)
。
这是使用不确定数量的参数处理方法的常用方法,例如String::format
中使用的方法。
编译器会自动将参数收集到引擎盖后面的数组中。在此代码中,varargs
是int
的数组,因此您可以轻松地遍历它。
public void method(int... varargs) {
for(int i=0; i < varargs.length; i++) {
System.out.println("Argument n°"+i+" is "+varargs[i]);
}
}
答案 2 :(得分:1)
这些点称为varargs
。您可以阅读有关他们的更多信息here。
总而言之,它们用于为该方法提供该类型的无限量参数。这样可以更轻松地访问和更清晰的代码。当你尝试使用它时,vararg
就像一个数组。