java.lang.ArrayStoreException位于java.lang.System.arraycopy(本机方法),java.util.ArrayList.toArray(未知源代码)位于Hai.main(Hai.java:20)

java.lang.ArrayStoreException位于java.lang.System.arraycopy(本机方法),java.util.ArrayList.toArray(未知源代码)位于Hai.main(Hai.java:20),java,Java,我在执行下面的代码时遇到以下错误 我试图使用toArray()将对象数组列表转换为BigDecimal数组 列表集合的方法 当我简单地给出fileFormatObj.toArray()时,它工作得很好,但是当我给出下面代码中的类似内容时,我得到了错误 public static void main(String[] args) { List<BigDecimal> objList = new ArrayList<BigDecimal>(); List&l

我在执行下面的代码时遇到以下错误

我试图使用toArray()将对象数组列表转换为BigDecimal数组 列表集合的方法

当我简单地给出fileFormatObj.toArray()时,它工作得很好,但是当我给出下面代码中的类似内容时,我得到了错误

public static void main(String[] args) 
{
    List<BigDecimal> objList = new ArrayList<BigDecimal>();
    List<Object[]> fileFormatObj = new ArrayList<Object[]>();
    final Object[] array1 = new Object[1];
    array1[0] = new BigDecimal(BigInteger.ONE);
    fileFormatObj.add(array1);
    if (fileFormatObj != null) 
    {
        //Error here java.lang.System.arraycopy    
        final BigDecimal[] arr = fileFormatObj
            .toArray(new BigDecimal[fileFormatObj.size()]);

        objList.addAll(Arrays.asList(arr));
        for (final BigDecimal object : arr) {
            System.out.println("TEST-->" + object.intValue());
        }
    }
}
publicstaticvoidmain(字符串[]args)
{
List objList=new ArrayList();
List fileFormatObj=new ArrayList();
最终对象[]数组1=新对象[1];
array1[0]=新的BigDecimal(BigInteger.ONE);
fileFormatObj.add(array1);
if(fileFormatObj!=null)
{
//此处错误:java.lang.System.arraycopy
final BigDecimal[]arr=fileFormatObj
.toArray(新的BigDecimal[fileFormatObj.size()]);
addAll(Arrays.asList(arr));
for(最终的BigDecimal对象:arr){
System.out.println(“TEST-->”+object.intValue());
}
}
}

问题在于
fileFormatObj
中的元素是
对象[]
,而不是
大十进制
。因此,您无法将
fileFormatObj
转换为
BigDecimal[]
。您甚至无法将其转换为
BigDecimal[][]
(因为
对象[]
不是
BigDecimal[]
),但目前您正在尝试将数组引用存储在
BigDecimal[]

不清楚你为什么要这样做,但这根本行不通。如果你编辑你的问题来解释你为什么要这么做-更大的图景是什么-我们可以帮助你更多

如果您必须将
列表
转换为
BigDecimal[]
并且希望获取每个数组的第一个元素,则可以使用以下方法:

BigDecimal[] arr = new BigDecimal[fileFormatObj.size()];
for (int i = 0; i < arr.length; i++) {
    Object[] fileFormatArray = fileFormatObj.get(i);
    Object firstElement = fileFormatArray[0];
    arr[i] = (BigDecimal) firstElement;
}
BigDecimal[]arr=新的BigDecimal[fileFormatObj.size()];
对于(int i=0;i

当然,您可以在一条语句中为
循环体执行整个
,我只是在这里将其拆分,以明确转换为
BigDecimal
的确切位置。

问题在于
fileFormatObj
中的元素是一个
对象[]
,而不是
BigDecimal
。因此,您无法将
fileFormatObj
转换为
BigDecimal[]
。您甚至无法将其转换为
BigDecimal[][]
(因为
对象[]
不是
BigDecimal[]
),但目前您正在尝试将数组引用存储在
BigDecimal[]

不清楚你为什么要这样做,但这根本行不通。如果你编辑你的问题来解释你为什么要这么做-更大的图景是什么-我们可以帮助你更多

如果您必须将
列表
转换为
BigDecimal[]
并且希望获取每个数组的第一个元素,则可以使用以下方法:

BigDecimal[] arr = new BigDecimal[fileFormatObj.size()];
for (int i = 0; i < arr.length; i++) {
    Object[] fileFormatArray = fileFormatObj.get(i);
    Object firstElement = fileFormatArray[0];
    arr[i] = (BigDecimal) firstElement;
}
BigDecimal[]arr=新的BigDecimal[fileFormatObj.size()];
对于(int i=0;i
当然,您可以在一条语句中完成整个
for
循环体-我在这里只将其拆分,以明确转换为
BigDecimal
的确切位置