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

时间:2016-10-13 14:23:42

标签: java arrays numbers

我正在使用Java的Number包装器,当我尝试将Number []转换为Byte []时出现以下错误:

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

如何编写这个以便我可以输入任何类型的数组并将其转换为Byte数组?

使用new ByteVector(1,2);调用构造函数,所以

3 个答案:

答案 0 :(得分:3)

由于一个简单的原因,你无法投射数组:它不安全。实施例

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 []中现在会有一个Double - 不可能发生!实际上,这也是另一回事:

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

答案 1 :(得分:0)

NumberSerializable,因此您只需序列化数组即可。

答案 2 :(得分:0)

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

this.coordinates = stream(numbers)
    .map(Number::byteValue)
    .toArray(Byte[]::new);
静态导入

stream方法java.util.Arrays.stream

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