我将一些数据添加到超级列表并尝试将该列表转换为byte [],但是获得了类转换异常。以下是我的代码。
public byte[] getBytes () {
Byte[] arrayByte = (Byte[])super.toArray();
byte [] bytes = Utility.toPrimitives(arrayByte);
return bytes;
}
03-13 11:56:27.480: E/AndroidRuntime(10471): Caused by: java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.Byte[]
答案 0 :(得分:2)
以适当的顺序(从第一个元素到最后一个元素)返回包含此列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。如果列表适合指定的数组,则返回其中。否则,将为新数组分配指定数组的运行时类型和此列表的大小。
表单列表如果要使用以下方式进行转换:
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);
答案 1 :(得分:0)
您的toArray
调用需要告诉列表要创建的数组类型:
Byte[] arrayByte = super.toArray(new Byte[size()]);
由于类型擦除,在执行时无法推断 - 列表不“知道”它是List<Byte>
。
现在因为您正在使用a method声明:
<T> T[] toArray(T[] a)
您无需投射结果。
请注意,您没有拥有来创建正确大小的数组 - 如果需要,该方法将创建一个新的 - 但指定正确的大小以避免创建一个数组毫无意义,所以效率稍高。