【问题标题】:How to pass a List of byte[] as a varargs parameter?如何将 byte[] 列表作为 varargs 参数传递?
【发布时间】:2020-09-11 15:49:23
【问题描述】:

我的问题非常接近this question。但不一样。 我有一个方法可以接受带有类似签名的可变参数

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

还有一个我想发送到该方法的字节 [] 列表。

List<byte[]> myList;

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

我以为会是这样的

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

但这不起作用 - 它说unexpected token at 0]))

提前致谢。

【问题讨论】:

  • “但那没有用” - 那么发生了什么?
  • 它在 0 处显示“意外标记”))所以我猜它在语法上不正确。
  • 试试doSomething(myList.toArray(new byte[0]));(你有一对括号/尺寸太多)
  • 不,预期的可变参数已经是一个数组。见,doSomething(byte[]... values)
  • 好的,请将错误消息编辑到您的问题中。 总是在问题中包含错误 - 否则就像去看医生并说“我认为我病了”并期待诊断而不提供任何更多信息。

标签: java variadic-functions


【解决方案1】:

这里有两个问题:

  • 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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-12
    • 2012-04-09
    • 2017-05-20
    • 2013-11-10
    • 2013-04-21
    • 1970-01-01
    • 2022-01-02
    • 2021-10-17
    相关资源
    最近更新 更多