如何将byte []的列表作为varargs参数传递?

问题描述

我的问题非常接近this question。但这不一样。 我有一个方法可以接受带有签名的varargs

static void doSomething(byte[]... values)

还有要发送给该方法的字节列表[]。

List<byte[]> myList;

如何将myList转换为byte[]可变参数以发送给doSomething

我以为会是这样

doSomething(myList.toArray(new Byte[][0]));

但这没用-它说unexpected token at 0]))

谢谢。

解决方法

这里有两个问题:

  • Bytebyte是不同的类型
  • 创建数组数组的语法不正确-应该为new byte[0][]。老实说,在这方面,数组的数组很烦人。我当然可以理解,为什么您会期望将[0]放在最后,但是在这种情况下,事实并非如此……

有了适当的更改,就可以了:

import java.util.*;

public class Test {

    public static void main(String[] args) {
        List<byte[]> myList = new ArrayList<>();
        myList.add(new byte[10]);
        myList.add(new byte[5]);
        doSomething(myList.toArray(new byte[0][]));
    }

    static void doSomething(byte[]... values) {
        System.out.printf("Array contained %d values%n",values.length);
    }
}