#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[][] .