Как исправить несовместимые типы с массивом объектов в списке - PullRequest
1 голос
/ 02 ноября 2011

У меня проблема с кодом ниже.Компилятор говорит, что несовместимые типы, 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();

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

Ответы [ 3 ]

3 голосов
/ 02 ноября 2011
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 голосов
/ 02 ноября 2011

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

Теперь мне кажется, что вы, возможно, на самом деле хотите сделать sqlQuery Object[][][] вместо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[][].

0 голосов
/ 02 ноября 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...