瓦拉格斯。
a)所有可选参数都属于同一类型:void foo(String a, Integer... b) {
Integer b1 = b.length > 0 ? b[0] : 0;
Integer b2 = b.length > 1 ? b[1] : 0;
//...}foo("a");foo("a", 1, 2);
(B)可选参数的类型可能不同:void foo(String a, Object... b) {
Integer b1 = 0;
String b2 = "";
if (b.length > 0) {
if (!(b[0] instanceof Integer)) {
throw new IllegalArgumentException("...");
}
b1 = (Integer)b[0];
}
if (b.length > 1) {
if (!(b[1] instanceof String)) {
throw new IllegalArgumentException("...");
}
b2 = (String)b[1];
//...
}
//...}foo("a");foo("a", 1);foo("a", 1, "b2");
这种方法的主要缺点是,如果可选参数是不同类型的,则会丢失静态类型检查。此外,如果每个参数都有不同的含义,则需要一些方法来区分它们。