Java多变长参数

标签 java android methods 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)

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/

相关文章:

java - 运行时异常无法启动 MainActivity

具有无限参数的 Java 方法

java - 在Java中,我可以创建一个名称由字符串传递的对象吗?

java - Google Guava 主干构建问题

java - 是否可以直接将方法的返回值赋值给变量?

java - 为什么在使用图形时无法查看添加到 JPanel 的 JLabel?

java - 在特定字符串位置添加字符

android - 在 Jelly Bean 中卸载非常慢

android - TextField 模糊在 Nativescript vue 中不起作用

c++ - C++中数组的指针