Я думаю, что все ваши ответы являются разумными, но так как вы пометили эту «передовую практику», я хотел бы напомнить вам о шаблоне проектирования пустых объектов. Везде, где это кажется стоящим усилий, для любого класса, нуждающегося в защите, пишите специальный код реализации для «нулевого» объекта этого класса. Идея в том, что этот «нулевой» объект является реальным и может вести себя надлежащим образом независимо от того, что вы просите его сделать. Ваш нулевой объект «String» может предоставить все, что вы хотите, поскольку это значение.
Этот шаблон также означает, что вы можете избавиться от множества пустых проверок, и код становится более надежным. Он использует немного ресурсов ЦП, отправляя сообщения на нули и заставляя их ничего не делать, поэтому менее желательно, когда ожидается, что большой процент объектов будет нулевым.