Java参数数组可否不传值?可变参数语法使用相关疑问
问题1:给出的test方法如何调用
你提供的test方法本身是非法的,不符合Java语法规则。Java明确规定可变参数(...定义的参数)必须位于方法形参列表的最后一位,你写的示例里可变参数String... strings之后还定义了String s2,这段代码在编译阶段就会直接报错,不存在可调用的可能。
如果要调整为合法的方法定义,需要把可变参数放到末尾,示例如下:
// 修正后的合法定义 void test(String s, String s2, String... strings) {}
合法定义后的调用方式可参考:
// 可变参数不传入值 test("参数1", "参数2"); // 可变参数传入多个零散值 test("参数1", "参数2", "可变1", "可变2", "可变3"); // 可变参数直接传入数组 test("参数1", "参数2", new String[]{"可变1", "可变2"});
问题2:如何用...语法实现等效代码
仅需要将foo方法的形参从数组声明改为可变参数声明即可,调用时既可以显式传入空数组,也可以直接不传参数,编译器会自动封装为长度为0的空数组传入,和你原代码效果完全一致。
完整示例代码:
public static void main(String[] args) { // 写法1:直接不传参数,等价于传入空数组 foo(); // 写法2:和你原来的写法完全一致,也支持 foo(new String[] {}); } // 把原来的String[] s改为String... s即可 static void foo(String... s) {}
内容的提问来源于stack exchange,提问作者TK36
相关产品推荐
相关产品推荐

