2015-09-11 3 views
1

Я следующий фрагмент кода, который я не могу понять, почему не работает:Как создать список массивов объектов, который имеет только один массив?

List<Object[]> listOfObjectArrays; 
listOfObjectArrays = new ArrayList<>(); 
Object[] objectArray = new Object[] {1, "two", null}; 
listOfObjectArrays.add(objectArray); 
// works just fine 

listOfObjectArrays = Arrays.asList(objectArray, objectArray); 
// works just fine 

listOfObjectArrays = Arrays.asList(objectArray); // * 
// compile error: Incompatible types. Required: List<java.lang.Object[]> Found: List<java.lang.Object> 

listOfObjectArrays = Arrays.asList(new Object[] {1, "two", null}); 
// compile error: Incompatible types. Required: List<java.lang.Object[]> Found: List<java.lang.Object> 

Может кто-нибудь, пожалуйста, мне точку в правильном направлении?

Я уже видел Jon Skeet's answer по другому вопросу, но последний пример там не работает для меня. Даже если я добавлю листинг в Object или Object[] в строке, помеченной * Я получаю ошибку компиляции.

+1

'Arrays.asList (новый объект [] {yourArray});'. 'asList' имеет аргумент varargs, и поэтому массив расширяется как несколько аргументов. – Emd4600

+0

Или 'Массивы <Список > .asList (objectArray)' –

+1

Ваш listOfObjectArrays содержит Arrays.asList преобразует массив объекта [] в список Вам нужен массив объект, который, как Object [] [] – kevintjuh93

ответ

2

Вы всегда можете узнать Java, что вы хотите получить список Object[], указав параметр типа явно:

Object[] objectArray = { 1, "two", null }; 
List<Object[]> listOfObjectArrays = Arrays.<Object[]>asList(objectArray); 
1
List<Object[]> listOfObjectArrays; 
listOfObjectArrays = new ArrayList<>(); 
Object[][] objectArray = new Object[][] {{1, "two", null}}; 
listOfObjectArrays.add(objectArray[0]); 
// works just fine 

listOfObjectArrays = Arrays.asList(objectArray); 
// works just fine 

Вам необходимо это сделать. Ваш список содержит Object [], когда вы делаете Arrays.asList, он просто выполняет итерацию по массиву и добавляет каждый индекс в список. как:

List<T> list = new List<>(); 
for (Object obj : objectArray) { 
    list.add(obj); 
} 

После этого он возвращает список. Как вы можете видеть, что это будет возвращать список, но вам требуется Список

0

Keppil хорошо сформулировал линию, которая будет решить мою текущую проблему, но Kevin's answer указал мне в правильном направлении, чтобы понять ситуацию.

До сих пор я использовал абстракцию, что Arrays.asList() обертывает аргументы в массиве независимо от содержимого, а затем использует его для создания ArrayList. В соответствии с этой моделью мой звонок должен был привести к ArrayList, поддерживаемому массивом, содержащим пройденный параметр Object[].

Глядя на Arrays.asList() источника стало ясно, что мой призыв (listOfObjectArrays = Arrays.asList(objectArray);) привело бы в список поддержанной objectArray себя, создавая ArrayList<Object>. Поэтому для того, чтобы иметь список массивов Object[], мне нужно передать массив из Object[] массивов (как предложил Кевин) или явно установить параметр типа Arrays на Object[], заставляя Arrays.asList() интерпретировать аргумент как массив, состоящий из Object[] предметов (согласно Keppil).

Смежные вопросы