我正在玩BigDecimal
,并且拥有以下MWE:
public class TestDoubleCopying {
private BigDecimal[] arr;
public TestDoubleCopying(double... arrIn) {
this.arr = (BigDecimal[]) Arrays.stream(arrIn).mapToObj(BigDecimal::new).toArray();
}
public void printAll() {
for (int i = 0; i < arr.length; i++)
System.out.print(+i + ", ");
System.out.println();
}
public static void main(String[] args) {
TestDoubleCopying tDC = new TestDoubleCopying(0.1, -1.5, 100.0002, -45.3120);
tDC.printAll();
}
}
给定的是,代码意外地抛出ClassCastException
,因为有人试图从Object
到BigDecimal
进行不安全的向下转换。请注意,从技术上讲,如果我的数据类型ClassCastException
的类型为arr
而不是Object
,我可以避免使用原始的ClassCastException
,但是我真的不希望将字段强制转换为预期的字段每次我想用它做某事时上课...
但是问题不仅出在ClassCastException
上,还出在方法引用BigDecimal::new()
上,它似乎只给我0、1、2、3等,而不是双精度数。我通过了论证。
我尝试了几种方法,这些方法试图解决使用lambda将某种类型的数组复制到另一种其他类型的数组的一般问题,例如,在OP和注释here和{ {3}}。我还查看了here,Stream和Arrays的JavaDocs(出于arrayCopy
的原因)。但是,我似乎无法找到一种用lambda优雅地在一行中做到这一点的方法。我正在寻找想法。