Лучший способ назначить неизменяемый экземпляр коллекции в Java - PullRequest
0 голосов
/ 02 мая 2010

Сегодня я читал код Hibernate и столкнулся с чем-то интересным. Существует класс CollectionHelper, который определяет следующую постоянную переменную:

public final class CollectionHelper {

   public static final List EMPTY_LIST = Collections.unmodifiableList( new ArrayList(0 ) ;
public static final Collection EMPTY_COLLECTION = Collections.unmodifiableCollection(new ArrayList(0) );
public static final Map EMPTY_MAP = Collections.unmodifiableMap( new HashMap(0) );

Они использовали эти константы для инициализации коллекций с неизменяемыми экземплярами. Почему они просто не использовали Collections.EMPTY_LIST для инициализации списков? Есть ли польза от использования следующего метода?

Ответы [ 2 ]

1 голос
/ 02 мая 2010

Нет, выгоды нет. Единственное очевидное для меня отличие состоит в том, что этот метод гарантированно возвращает значение EMPTY_LIST, отличное от любого List, созданного с помощью Collections.emptyList(), тогда как реализации Collections.emptyList() могут возвращать или не возвращать одинаковые List экземпляры. Я более склонен согласиться с комментарием @ WizardOfOdds, что они просто не знали об этих функциях API.

0 голосов
/ 02 мая 2010

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

...