2016-05-20 2 views
0

Как передать полный список без повторения через него в Java. У меня есть эта функция:Java как отличить весь список

private List<Object> getItems (List<Object> list, Pagination pagination) { 

     if (list.size() > pagination.getItemsXPage()) { 

      int init = (pagination.getCurrentPage()-1)* pagination.getItemsXPage(); 
      int end = init + pagination.getItemsXPage(); 

      if (end > list.size()) { 
       end = list.size(); 
      } 

      return list.subList(init, end); 

     } else { 

      return list;       
     }  

    } 

Я хочу, чтобы это сделать, но это не возможно?

List<ApplicationSearchItem> applicationSearchItem = (List) getItems (list, searchCriteria.getCategoryProductsPagination()); 
+3

Короткий ответ: вы не можете. Длинный ответ: создайте новый «List » и скопируйте каждый элемент один за другим, выполнив его. См. [Этот вопрос] (http://stackoverflow.com/questions/933447/how-do-you-cast-a-list-of-supertypes-to-a-list-of-subtypes). – Turing85

ответ

4

В этом случае вы должны использовать общие методы декларации:

К настоящему времени, вы уже научились избегать ошибок новичка в попытке использовать Collection < Object> в качестве типа параметра коллекции , Вы можете или не могли признать, что с использованием Collection <? > тоже не будет работать. Напомним, что вы не можете просто перетаскивать объекты в коллекцию неизвестного типа.

from oracle generic methods tutorial

Возвращаемый тип определяется типом списка параметров:

private <T> List<T> getItems (List<T> list, Pagination pagination) { 
... 
} 
+1

Несвязанный, но поскольку метод не использует никаких полей, он также должен быть 'static'. – Andreas

0

С текущего кода вы должны либо бросить каждый объект по отдельности, или изменить параметры ваших метод от List<Object> к списку <ApplicationSearchItem>, чтобы избежать использования броска.

Причина, по которой вы не можете просто перечислить весь список, состоит в том, что список является всего лишь ссылочным держателем; фактический список указывает только на типы объектов и гарантирует, что в списке будут только объекты нужного типа. В самой памяти объекты все еще существуют независимо от списка, поэтому в любом случае они будут индивидуально использоваться для преобразования их типов.

Выполняя то, что говорит dok (другой ответ), ваш метод может принимать объекты любого типа и работать с ними. В качестве альтернативы вы можете использовать только списки, в которых вам не нужно делать трансляции.

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