Java - 将列表元素作为参数传递给无限制参数方法

5
我有一个带有无限参数的方法:
void X(Object... values){};

「一个用户应该输入的未知列表。」
「现在我想将该列表的所有元素传递给方法X,例如」
this.X(list.get(0), list.get(1)......);

有人可以告诉我如何做吗?


1
请查看 List#toArray(..) - Sotirios Delimanolis
2个回答

11

声明为方法的方式

void X(Object... values){};

与声明为方法

类似。
void X(Object[] values){};

可以使用Object[]调用它,但只能使用第一个来传递可变数量的参数。您可以使用List.toArray()将列表转换为数组,以便您可以调用X(list.toArray())。以下是演示示例代码:

import java.util.Arrays;

public class VarargsExample {

    public static void foo( Object... args ) { 
        System.out.println( "foo: "+Arrays.toString( args ));
    }

    public static void bar( Object[] args ) {
        System.out.println( "bar: "+Arrays.toString( args ));
    }

    public static void main(String[] args) {
        // only foo can be called with variable arity arguments
        foo( 1, 2, 3 );
        // bar( 4, 5, 6 ); // won't compile 

        // both methods can be called with object arrays
        foo( new Object[] { 7, 8, 9 } );
        bar( new Object[] { 10, 11, 12 } );

        // so both can be called with List#toArray results
        foo( Arrays.asList( 13, 14, 15 ).toArray() );
        bar( Arrays.asList( 16, 17, 18 ).toArray() );
    }
}

foo: [1, 2, 3]
foo: [7, 8, 9]
bar: [10, 11, 12]
foo: [13, 14, 15]
bar: [16, 17, 18]

6

您可以将单个项目或项目数组传递给这样的可变参数方法。使用toArray方法将列表转换为数组以进行传递:

this.X(list.toArray());

如果您需要List.toArray()返回特定的对象类型,只需进行小的修改,像这样:String[] a = list.toArray(new String[list.size()]); - shtolik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接