只有最后一个参数是允许为可变长度:
String prepareStatement(String[] columnNames, String... values)
串...则为string []所以在这种情况下,你可以插入一个String []的第一个参数,只是检查如果它是空的或多长时间。
编辑您的编辑
如果你真的需要为所有的字符串作为参数输入,我会建议定义一个真的很罕见的字符串到单独的输入:
static String prepareStatement(String... params)
{
String ret = "";
boolean valueInput = false;
for(String s : params)
{
if(s.equals("MyReallyUncommonSeperateString"))
{
valueInput = true;
ret+="\nvalues\n";//visual delimiter of columnNames and Values
}
else if(valueInput)
{
//handling of your value inputs
ret+=s; //example handling, concatenate everything
}
else
{
//handling of your columnnames
ret+=s; //example handling, concatenate everything
}
}
return ret;
}
你可以叫它:
System.out.println(prepareStatement("a","b","c","d","e","MyReallyUncommonSeperateString","f","g","h","i","j","k"));
输出:
abcde
values
fghijk
另一种方法是,得到COLUMNNAMES作为参数的长度,以及:
static String prepareStatement(int length, String... params)
{
String ret = "";
for(int i = 0; i < length; i++){
//handling of columnnames
String colName = params[i];
//do something with colName
ret+=colName; //example handling, concatenate everything
}
ret+="\nvalues\n";//visual delimiter of columnNames ans Values
for(int i = length; i < params.length; i++){
String value = params[i];
//do something with values
ret+=value; //example handling, concatenate everything
}
return ret;
}
在呼叫进行:
System.out.println(prepareStatement(5, "a","b","c","d","e","f","g","h","i","j","k"));
和相同的输出:
abcde
values
fghijk
看看这个:http://stackoverflow.com/questions/2161912/why-varargs-should-be-the-last-in-method-signature –