我正在使用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);
调用构造函数,所以
答案 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)
Number
为Serializable
,因此您只需序列化数组即可。
答案 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
。四个双打和浮点数,所有小数部分都将丢失。