Akh*_*ain 6 java methods android variadic-functions method-declaration
在处理变长参数之前,我还没有看到今天之前的特定事情
例如,有一个名为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)
Run Code Online (Sandbox Code Playgroud)
2.另一种方法声明
String prepareStatement(int i,String... columnNames,String... values)
//still the same result as above(The variable ...... parameter)
Run Code Online (Sandbox Code Playgroud)
为什么java不允许多个变量长度参数?还有其他方法可以实现吗?
PS:这样做的原因是我的要求是为传递的参数生成通用的预准备语句,因为所有这些参数都将通过属性传递
Lok*_*oki 18
只允许最后一个参数变量长度:
String prepareStatement(String[] columnNames, String... values)
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
你可以称之为:
System.out.println(prepareStatement("a","b","c","d","e","MyReallyUncommonSeperateString","f","g","h","i","j","k"));
Run Code Online (Sandbox Code Playgroud)
输出:
abcde
values
fghijk
Run Code Online (Sandbox Code Playgroud)
另一种方法是将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;
}
Run Code Online (Sandbox Code Playgroud)
通过电话:
System.out.println(prepareStatement(5, "a","b","c","d","e","f","g","h","i","j","k"));
Run Code Online (Sandbox Code Playgroud)
和相同的输出:
abcde
values
fghijk
Run Code Online (Sandbox Code Playgroud)
为什么java不允许多个变量长度参数?还有其他方法可以实现吗?
我相信这个宣言:
String prepareStatement(String... columnNames,String... values)
Run Code Online (Sandbox Code Playgroud)
如果您调用该方法
prepareStatement("x","y");
Run Code Online (Sandbox Code Playgroud)
没有办法解决"x"并"y"属于哪个论点.
| 归档时间: |
|
| 查看次数: |
15198 次 |
| 最近记录: |