Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将java.lang.Number[]转换为java.lang.Byte[]?_Java_Arrays_Numbers - Fatal编程技术网

如何将java.lang.Number[]转换为java.lang.Byte[]?

如何将java.lang.Number[]转换为java.lang.Byte[]?,java,arrays,numbers,Java,Arrays,Numbers,我正在玩Java的数字包装器,当我试图将数字[]转换为字节[]时,出现了以下错误: Exception in thread "main" java.lang.Error: Unresolved compilation problems: Cannot cast from Number[] to byte[] Type mismatch: cannot convert from byte[] to Byte[] 它破坏的代码是: 字节[]坐标 ByteVector(Number

我正在玩Java的数字包装器,当我试图将数字[]转换为字节[]时,出现了以下错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    Cannot cast from Number[] to byte[]
    Type mismatch: cannot convert from byte[] to Byte[]
它破坏的代码是: 字节[]坐标

ByteVector(Number... coordinates) {
    super(coordinates);
    this.coordinates = (Byte[])coordinates;
}
我如何编写它,以便输入任何类型的数字数组并将其转换为字节数组


使用
新字节向量(1,2)调用构造函数,所以不能强制转换数组,原因很简单:它不安全。范例

Number[] numbers = new Number[10];
numbers[0] = new Byte(10);
numbers[1] = new Byte(11);
Byte[] bytes = (Byte[]) numbers;
numbers[2] = new Double(0);
因此,如果这是允许的,那么现在在字节[]中会有一个双精度-不可能发生!事实上,另一方面也是如此:

Byte[] numbers = new Byte[10];
numbers[0] = new Byte(10);
numbers[1] = new Byte(11);
Number[] bytesNumbers = (Number[]) numbers; // upcast - still not safe!
bytesNumbers[2] = new Double(0);

Number
可序列化的
,因此您可以简单地序列化数组。

您可以使用Java 8流API迭代数组,将每个数字转换为字节并收集到数组:

this.coordinates = stream(numbers)
    .map(Number::byteValue)
    .toArray(Byte[]::new);
stream
方法是静态导入的
java.util.array.stream


请注意,此处可能会丢失精度。例如,如果
numbers
包含
12345
将转换为
57
。四个双精度和浮点数,所有小数部分都将丢失。

您想将
数字[]
转换为
字节[]
对吗?我不能转换为字节[],因为它是一个基本类型,所以我想我可以将它转换为它的包装类。您看过使用
Number.byteValue()
吗?你想要实现什么?当
BigDecimal
将作为参数传递时会发生什么情况?@Friso1990您最终想要
Byte[]
还是
Byte[]
?因此,如果我想从数字数组转到字节数组,我需要首先创建字节数组,然后将每个单独的数字转换成字节数组?@Friso1990是的。这就是方法