Мне также нравится этот оператор, но он не доступен на Java - плюс это патч-пробел для небрежного кода: если у dog.collar нет тега, он, вероятно, должен переходить по-другому, и если у тега нет имени - это, вероятно, ошибка и должно выдать исключение.
Нельзя сказать, что когда вы наследуете код, который вы не написали, все решает, что лучше сказать «код лучше».
Я предлагаю сначала провести рефакторинг своего кода - если подобный код происходит повсеместно, возможно, его все равно нужно перенести в централизованную функцию. Если dog.getName () делегирует dog.collar (), чтобы получить его тег и, наконец, имя тега, то вам нужно исправить эту ошибку только в одном месте (у собаки должно быть имя, даже если оно не на ошейнике, поэтому dog.getName должен иметь возможность пройти любой путь, чтобы решить вашу проблему - теперь сделайте это снова для СЛЕДУЮЩЕГО пятна дрянного кода.
Всякий раз, когда вы видите, что исправляете один и тот же код в двух местах, возникает проблема факторинга. Если это происходит только один раз для каждой группы атрибутов (если она уже полностью разложена и является ОО), то это не может быть серьезной проблемой, просто пара патчей.
Черт возьми, разве такой код даже не нарушает несколько правил знакомства?