Не указывать, какой список реализации - PullRequest
0 голосов
/ 29 сентября 2011

У меня есть сомнения по поводу изменения этого:

List<String> elements = new ArrayList<String>();

 elements = elementDao.findElementsById(elementId);

на

List<String> elements;

elements = elementDao.findElementsById(elementId);

(я использую DAO с Hibernate)

Может ли это вызвать какие-либо ошибкиили исключения (тот факт, что я не указываю, какая реализация List должна быть возвращена)?

Ответы [ 2 ]

3 голосов
/ 29 сентября 2011

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

Второй лучше, но должен быть уменьшен до

List<String> elements = elementDao.findElementsById(elementId);

Кажется, вы думаете, что оператор присваивания может использоваться для заполнения списка, созданного вызывающим абонентом. Это не вариант. оператор присваивания просто берет ссылку на список, созданный DAO (который может быть любым списком), и присваивает эту ссылку переменной.

2 голосов
/ 29 сентября 2011

Вы можете смело изменять его, потому что:

List<String> elements = new ArrayList<String>();

создает новый ArrayList и присваивает его elements, затем

elements = elementDao.findElementsById(elementId);

выбрасывает оригинал ArrayList(и помечает его как сборщик мусора) и присваивает ему elements List, созданный внутри elementDao, поэтому второй подход такой же безопасный и более эффективный.

...