2013-06-13 8 views
2

Мне нужно нарисовать объект в многомерном массиве, но не могу понять, как это сделать. Объект может содержать массив любого объекта (boolean [] [], int [] [], String [] [] и т. Д.). Вот пример кода:Кастинг Object to Object [] []

public static void main(String[] args) { 
    boolean[][] b = new boolean[10][10]; 

    Object o = b; 

    Object[][] multiArray = (Object[][])o; 

    for(int i = 0; i < multiArray.length; i++) { 
     for(int j = 0; j < multiArray[i].length; j++) { 
      // Do something 
     } 
    } 
} 
+2

«Мне нужно, чтобы привести объект в многомерный массив» <- вы не можете – fge

ответ

4

boolean[][] является массив примитивов, таким образом, хотя массивы ковариантны, так как boolean не является Object, это дает вам ошибку, говорящую вам литая является незаконным. Возможно, вы захотите использовать Boolean[][]. Также обратите внимание, что распаковка и бокс не работают на массивах.

3

Вы не можете этого сделать. A boolean является примитивным, а не ссылочным типом. Поэтому, когда массив (или многомерный массив) значений boolean сам по себе является Object, его элементами являются boolean значения, а не числа Object.

Если вы хотите иметь массив объектов, вам нужно будет поместить значения boolean как Boolean объектов.

Обратите внимание, что вы все еще можете написать свой код с петлями без бокса:

for(int i = 0; i < b.length; i++) { 
    for(int j = 0; j < b[i].length; j++) { 
     // Do something with b[i][j] as a boolean 
    } 
} 
1

Преобразовать boolean в Boolean. Java может затем бросить Boolean в Object для вас (как подкласса и суперкласса)

1

Try это, заметив, что массив примитивных boolean был заменен на массив Boolean (то же рассмотрение для других типов данных, например: использовать Integer вместо int и т.д.), которые являются типами объектов и может быть отлито в Object:

public static void main(String[] args) { 

    Boolean[][] b = new Boolean[10][10]; 
    // fill b with values 

    Object[][] multiArray = new Object[10][10]; 

    for(int i = 0; i < multiArray.length; i++) { 
     for(int j = 0; j < multiArray[i].length; j++) { 
      multiArray[i][j] = b[i][j]; // no cast is needed 
     } 
    } 

}