这是什么意思?我不知道第一个方法m
参数声明是什么意思。
它拒绝传入String
,但允许使用一维数组String []
和二维数组String[][]
。它不允许[][][]
或其他任何内容。
有人可以解决这个问题吗?
class j{
public static void m(String [] ... a) {
System.out.println("Y");
}
public static void main(String[] args) {
String [][] s = {};
m(s);
}
}
感谢。
答案 0 :(得分:6)
public static void m(String [] ... a)
表示你的函数可以接受任意数量的String []作为参数,并且在函数中你将拥有一个String []数组(即String [] [])作为{{的类型1}}。您也可以直接传递单个String [] [],而不是传递多个String []。
例如......
a
在每种情况下,String [] x = {"a", "aa", "aaa"};
String [] y = {"b", "bb", "bbb"};
String [] z = {"c", "cc", "ccc"};
//All of these are valid uses of m(...).
m(x);
m(x,y);
m(x,y,z);
都会有一个名为m
的二维字符串数组。
此外,由于a
是a
,您也可以直接传递一个String[][]
。
String[][]
答案 1 :(得分:1)
有两种方法可以提供类型为T的可变数量的参数。您可以直接列出可转换为T的赋值表达式,也可以提供单个T []。
对于特定情况,这意味着您可以列出String []类型的表达式,或者提供单个String [] []。
答案 2 :(得分:1)
这只是编译器的一些语法糖。
那是:
ReturnType withVarArgs(ParamType... params) {}
大致相当于:
ReturnType noVarArgs(ParamType[] params) {}
有以下不同之处:
a
类型的变量b
,c
,ParamType
,则可以使用语法withVarArgs
调用withVarArgs(a, b, c)
函数;你必须自己创建一个中间数组来调用noVarArgs
变体。Object...
子类型的任何数组时,Object[]
和Object
的行为会有所不同(例如,假设您想通过一个String[]
):
Object...
一起使用,String[]
数组对象将被包装在1个元素的对象数组中; Object[]
一起使用,String[]
数组对象将被直接使用,因为Java中的数组在其元素类型上是协变的;