今天之前我在处理可变长度参数时还没有看到特别的东西
例如,有一个名为 prepared statement 的方法,其声明如下
1.
String prepareStatement(String... columnNames,String... values)
//String... columnNames(Eclipse shows error saying The variable argument type String of the method prepareStatement must be the last parameter)
2.另一种方法声明
String prepareStatement(int i,String... columnNames,String... values)
//still the same result as above(The variable ...... parameter)
为什么 java 不允许多个可变长度参数??还有其他方法可以实现吗?
P.S: 这样做的原因是我的要求是为传递的参数生成通用的准备语句,因为所有这些参数都将通过属性传递
最佳答案
只允许最后一个参数是可变长度:
String prepareStatement(String[] columnNames, String... values)
String... 等于 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
关于Java多变长参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17924999/