public class VarargsParamVsLocalVariable {

    static void f(List<String>... stringLists) {
        // compiles fine! No problems in Runtime as well.
        Object[] array = stringLists;
    }

    //but the same fails if List<String> is not a vararg parameter
    public static void main(String[] args) {
        List<String> stringLists;
        List<String> stringLists1 = new ArrayList<>();
        //below lines give: "cannot convert from List<String> to Object[]"
        Object[] array = stringLists; // compile error!
        Object[] array1 = stringLists1; // compile error!
    }
}

 // Why I can assign List<String> variable to Object[] variable if List<String> variable is a vararg parameter?

如果List变量是vararg参数,为什么可以将List变量分配给Object []变量?

最佳答案

因为像List<String>... stringLists这样的 Varargs 在某种程度上等效于像List<String>[] stringLists这样的数组

为了使您的代码编译,您应该创建一个array,如下所示:

Object[] array1 = {stringLists1};

对于stringLists,您将需要首先对其进行初始化,否则即使您尝试如上所述创建一个数组也无法编译。

出于相同的原因,可以重写public static void main(String[] args) {:
public static void main(String... args) {

07-24 09:25