有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java变量列表数(ArrayList)作为方法的参数

Java中有一种方法可以处理数量可变的字符串参数,如

public void returnString(String...args){
     //some code
}
// calling it
returnString("abc","def","klm")

我想知道这是否也适用于收藏。
如果没有,还有什么替代方案。我读到列表数组是不可能的,所以想知道这是如何工作的

//Sample code of what I am trying to do
public void returnList(List...args){
    //some code
}

共 (2) 个答案

  1. # 1 楼答案

    我不知道哪里出了问题。。。。但这里有一个例子:

    import java.util.ArrayList;
    import java.util.List;
    
    public class Main {
    
      public static void tryIt(List... lists) {
        System.out.println("You insert " + lists.length + " lists.");
      }
        public static void main(String[] args) {
          List<String> listStrings = new ArrayList<>();
          listStrings.add("TEST");
          List<Integer> listInteger = new ArrayList<>();
          listInteger.add(1);
          tryIt(listStrings);
          tryIt(listStrings, listInteger);
        }
    }
    

    结果:

    You insert 1 lists.
    You insert 2 lists.
    

    访问阵列示例:

    import java.util.ArrayList;
    import java.util.List;
    
    public class Main {
      public static void tryIt(List... lists) {
        System.out.println("You insert " + lists.length + " lists.");
        if (lists.length>2)
          for (Object obj : lists[2]) {
            System.out.println(obj);
          }
      }
      public static void main(String[] args) {
        List<String> listStrings = new ArrayList<>();
        listStrings.add("TEST");
        List<Integer> listInteger = new ArrayList<>();
        listInteger.add(1);
        List<String> anotherStringList = new ArrayList<>();
        anotherStringList.add("First value.");
        anotherStringList.add("Second value.");
        anotherStringList.add("Third value.");
        tryIt(listStrings);
        tryIt(listStrings, listInteger);
        tryIt(listInteger, listStrings, anotherStringList);
        }
    }
    

    输出:

    You insert 1 lists.
    You insert 2 lists.
    You insert 3 lists.
    First value.
    Second value.
    Third value.
    
  2. # 2 楼答案

    JLS §15.12.4.2

    If the method being invoked is a variable arity method m, it necessarily has n > 0 formal parameters. The final formal parameter of m necessarily has type T[] for some T, and m is necessarily being invoked with k ≥ 0 actual argument expressions.

    因此,该类型将是一个T数组。在第一个示例returnString(String...args)中,它是String[]。在第二个示例returnList(List...args)中,它是List[]

    当然,您可以在Java中使用List数组

    现在,如果您想在方法体中使用List而不是args的数组,那么varargs对您没有帮助,但是您可以使用Arrays.asList(args)构建该列表