Как исправить несовместимые типы с массивом объектов в списке

#java #list #object #casting #arraylist

#java #Список #объект #Кастинг #arraylist

Вопрос:

У меня проблема с приведенным ниже кодом. Компилятор говорит, что несовместимые типы, java.lang.object[][] требуется, но найден java.lang.object[] .

У кого-нибудь есть идея, почему это так? Я нашел кое-что о дженериках, которые создают проблемы здесь, но не решают мою проблему.

 Object sqlQuery[][] = null;

List<Object[]> sqlLista = new ArrayList<Object[]>();
   while (resultSet.next()) {
      sqlLista.add(new Object[] { false, resultSet.getString("MMITNO"), null, null, null, null, null } );
   }

sqlQuery = sqlLista.toArray();
  

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

Ответ №1:

Проблема в том, что вы вызываете перегрузку без параметров toArray() , которая возвращает Object[] . Вы не можете присвоить Object[] Object[][] переменной.

Теперь мне кажется, что вы, возможно, на самом деле хотите сделать sqlQuery Object[][][] вместо an Object[][] , чтобы получить один двумерный массив на запись в результирующем наборе. Тогда у вас будет:

 // Please use this form rather than putting the brackets after the name
// - it keeps all the type information together.
Object[][][] sqlQuery = null; // No point giving it a dummy value

List<Object[][]> list = new ArrayList<Object[][]>();
...
sqlQuery = list.toArray(new Object[0][][]);
  

Однако я бы настоятельно посоветовал вам в любом случае не идти по этому пути — инкапсулируйте концепцию «результата», которая в настоящее время находится только Object[][] в новом типе, чтобы у вас было:

 Result[] sqlQuery = null;

List<Result> list = new ArrayList<Result>();
...
sqlQuery = list.toArray(new Result[0]);
  

Об этом будет намного проще рассуждать — даже если Result содержит только Object[][] .

Ответ №2:

 sqlLista.toArray(); 
  

возвращает массив, где каждый элемент = Object[][], тип возвращаемого массива не является самим Object[][] .

Измените свой код на:

 Object sqlQuery[][] = new Object[][] { };

List<Object[]> sqlLista = new ArrayList<Object[]>();
   while (resultSet.next()) {
      sqlLista.add(new Object[] { false, resultSet.getString("MMITNO"), null, null, null, null, null } );
   }

sqlQuery = sqlLista.toArray();
  

Ответ №3:

Посмотрите на объявление List.toArray() .

Он хочет преобразовать в массив объекта (Object[]). Но sqlQuery объявляется как массив массива объекта (Object[][]).

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