Java 如何从列表中获取字节数组?

Java 如何从列表中获取字节数组?,java,android,Java,Android,我正在向超级列表中添加一些数据,并尝试将该列表转换为字节[],但得到类强制转换异常。下面是我的代码 public byte[] getBytes () { Byte[] arrayByte = (Byte[])super.toArray(); byte [] bytes = Utility.toPrimitives(arrayByte); return bytes; } 错误日志 从 返回一个数组,该数组按正确顺序(从第一个元素到最后一个

我正在向超级列表中添加一些数据,并尝试将该列表转换为字节[],但得到类强制转换异常。下面是我的代码

public byte[] getBytes () {
        Byte[] arrayByte = (Byte[])super.toArray();
        byte [] bytes = Utility.toPrimitives(arrayByte);
        return bytes;
    }
错误日志 从

返回一个数组,该数组按正确顺序(从第一个元素到最后一个元素)包含此列表中的所有元素;返回数组的运行时类型是指定数组的运行时类型。如果列表适合指定的数组,则返回其中。否则,将使用指定数组的运行时类型和此列表的大小分配一个新数组

如果要转换表单列表,请使用以下方法:

Byte[] byteArray = (Byte[]) super.toArray(new Byte[0]);
// You can pass the correct size for Array, if not method will create new one. 
Java 8中的另一种选择:

Byte[] byteArray= super.stream().toArray(Byte[]::new);

您的
toArray
调用需要告诉列表要创建哪种数组:

Byte[] arrayByte = super.toArray(new Byte[size()]);
由于类型擦除,无法在执行时推断出这一点-列表不“知道”它是一个
列表

现在,因为您正在使用以下声明:

<T> T[] toArray(T[] a)
T[]toArray(T[]a)
你不需要决定结果

请注意,您不必创建正确大小的数组-如果需要,该方法将创建一个新的数组-但是指定正确的大小可以避免无意义地创建一个数组,因此效率略高

<T> T[] toArray(T[] a)