Выбор между различными подходами для создания List <Foo>foo из fooService.getFoos () - PullRequest
0 голосов
/ 25 сентября 2010

Если fooService.getFoos() возвращает List<Foo>.

, вы можете написать это:

List<Foo> fooList = fooService.getFoos();

или это:

List<Foo> fooList = new ArrayList(fooService.getFoos());

Есть ли существенная разницав результате fooList между этими двумя подходами?

Ответы [ 4 ]

1 голос
/ 25 сентября 2010

Да - вы создаете совершенно новый List, содержащий элементы оригинального.Вы дублируете коллекцию в памяти и выполняете ее от начала до конца.Вы также не используете экземпляр, предоставленный сервисом, и не можете изменить оригинал.И, наконец, вы пропустили объявление generics во 2-м фрагменте.

Так что используйте первый вариант.

Обновление: вы указали, что не можете изменятьОригинальный список.Это на самом деле проблема fooService, а не его клиентов.Если служба также находится под вашим контролем, верните Collections.unmodifiableList(originalList) - таким образом, клиенты не смогут выполнять операции модификации (при попытке будет сгенерировано исключение)

1 голос
/ 25 сентября 2010

Второе не очень хорошая идея, потому что вы опускаете общую часть.

Но главная проблема - это ненужный код, который будет вызываться.Вы можете посмотреть на источник кода ArrayList и увидеть все операции, используемые в конструкторе.Если вам нужен только список, а fooService.getFoos() возвращает действительный список, вам следует придерживаться его.

Результат этих двух операторов будет более или менее одинаковым, если:

  • позже вы проверяете, является ли ваш список экземпляром ArrayList, и приводите его, но давайте посмотрим правде в глаза, вы бы объявили ArrayList<Foo>, если бы это было так.
  • список, возвращаемый fooService.getFoos()не должны быть изменены (по любой причине), но вы все равно хотите изменить элементы в Списке на вашей стороне (без влияния на исходный список).

Ресурсы:

0 голосов
/ 25 сентября 2010

Во втором операторе он возвращает только тип списка. Если вы уверены, что метод возвращает тот же тип den, вы можете использовать первый тип.

0 голосов
/ 25 сентября 2010

Я бы остановился на первом только потому, что он намного легче читается и имеет больше смысла, чем второй.

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