Приятно, что не нужно проверять NULL, а некоторые языки делают это проще - например, Типы C #, не являющиеся NULLable, или Haskell, который не имеет NULL, но может выразить отсутствующее значение с помощью конструктора типа Maybe.
NULL отличается от пустого списка. Вы можете принять точку зрения, что кто-то, передающий NULL, где вам нужен список, делает ошибку в программировании, и что правильно сделать, это выбросить исключение NullPointerException.
Типичное оправдание для принятия значений NULL состоит в том, что часто есть случай, когда вам не нужен список, и вам не нужно создавать новый пустой список, особенно когда есть некоторая обеспокоенность по поводу эффективности. Вы можете получить множество преимуществ, не меняя язык, но вместо этого имея статический пустой список, в который могут проходить люди, который не нужно повторно инициализировать.