将Java数组的数组强制转换为Java 2D数组

将Java数组的数组强制转换为Java 2D数组,java,arrays,casting,Java,Arrays,Casting,我有一个类型为object[]的对象。数组的所有元素实际上都是Object[]对象。所以本质上看起来是这样的 Object[] oneD = {objectArray1, objectArray2, objectArray3, ...} 我想将其强制转换为对象[][],如下所示: Object[][] twoD = (Object[][])oneD; 但是我得到了编译器错误和ClassCastException 有(正确的)方法吗?简单地说 String [] a = {"a", "

我有一个类型为
object[]
的对象。数组的所有元素实际上都是
Object[]
对象。所以本质上看起来是这样的

Object[] oneD = {objectArray1, objectArray2, objectArray3, ...}
我想将其强制转换为
对象[][]
,如下所示:

Object[][] twoD = (Object[][])oneD;
但是我得到了编译器错误和
ClassCastException

有(正确的)方法吗?

简单地说

    String [] a = {"a", "b"}; 
    String [] b = {"c", "d"}; 

    String [][] ab = {a,b};
简单地说

    String [] a = {"a", "b"}; 
    String [] b = {"c", "d"}; 

    String [][] ab = {a,b};

您不能在数组类型之间转换-java不是C,但您可以非常轻松地转换一种类型:

Object[] oneD = {new Object[]{}, new Object[]{}, ...};
Object[][] twoD = Arrays.stream(oneD).map(Object[].class::cast).toArray(Object[][]::new);

您不能在数组类型之间转换-java不是C,但您可以非常轻松地转换一种类型:

Object[] oneD = {new Object[]{}, new Object[]{}, ...};
Object[][] twoD = Arrays.stream(oneD).map(Object[].class::cast).toArray(Object[][]::new);

假设内部对象数组具有相同的大小,可以这样做:

    Object[] asdf = {new Object[3], new Object[3], new Object[3]};
    Object[][] newAsdf = {{asdf[0]}, {asdf[1]}, {asdf[2]}};

假设内部对象数组具有相同的大小,可以这样做:

    Object[] asdf = {new Object[3], new Object[3], new Object[3]};
    Object[][] newAsdf = {{asdf[0]}, {asdf[1]}, {asdf[2]}};


是的,将其声明为
对象[][]asdf
;它是从一个方法返回的。关于更多的上下文,我有一个方法可以在1D数组上运行,我想传入两个2D数组,让它在它们的第一个维度上运行。创建一个处理二维数组的新方法,并将第一个维度传递给原始方法。是的,我可以将1D方法复制并粘贴到处理二维数组的第二个方法中,然后继续。但我要找的是一个比这更好的解决方案。这是一个比你建议的更好的解决方案。您试图强制相同的方法处理两种类型的数组。这是一个糟糕的模式!是的,将其声明为
对象[][]asdf
;它是从一个方法返回的。关于更多的上下文,我有一个方法可以在1D数组上运行,我想传入两个2D数组,让它在它们的第一个维度上运行。创建一个处理二维数组的新方法,并将第一个维度传递给原始方法。是的,我可以将1D方法复制并粘贴到处理二维数组的第二个方法中,然后继续。但我要找的是一个比这更好的解决方案。这是一个比你建议的更好的解决方案。您试图强制相同的方法处理两种类型的数组。这是一个糟糕的模式!我认为OP有一个
对象[]
,包含任意数量的元素,每个元素都是
对象[]
,交给他,并希望将其作为
对象[]
来处理。所以他不能这样编码。所以我应该投票结束这个问题,因为
不清楚
我想问的是如何将
对象[]
转换成
对象[][]
,而不是实例化
对象[][]
。我认为这很清楚,我可能认为OP有一个
对象[]
,包含任意数量的元素,每个都是
Object[]
,交给他,希望将其作为
Object[][]
进行处理。所以他不能这样编码。所以我应该投票结束这个问题,因为
不清楚
我想问的是如何将
对象[]
转换成
对象[][]
,而不是实例化
对象[][]
。我认为这很清楚,而且可能是因为OP不知道
asdf中有多少元素,所以这段代码没有用。除了OP不知道asdf中有多少元素,所以这段代码没有用。谢谢!这正是我需要的。获取
asdf
的所有元素,将它们强制转换为
对象[]
对象,然后将它们全部放入
对象[]
。很好的解决方案,谢谢!这正是我需要的。获取
asdf
的所有元素,将它们强制转换为
对象[]
对象,然后将它们全部放入
对象[]
。绝妙的解决方案。