Мне хотелось бы, чтобы этот поток был своего рода резюме плюсов/минусов для переопределения и вызова toString
с пустыми скобками или без них, потому что эта вещь иногда меня смущает, хотя я был в Scala довольно долгое время.
Итак, какой из них предпочтительнее другого? Комментарии от Scala выродков, чиновников и параноиков OCD высоко ценятся.
Плюсы до toString
:
- кажется очевидным и естественным выбором на первый взгляд;
- большинство случаев тривиальны и просто строят строки "на лету" без изменения внутреннего состояния;
-
другим распространенным случаем является делегирование вызова метода завернутой абстракции:
override def toString = underlying.toString
Плюсы до toString()
:
- определенно не "accessor-like" name (то, как инспектор IntelliJ IDEA каждый раз жалуется);
- может означать работу процессора или ввода-вывода (в тех случаях, когда подсчет каждого вызова
System.arrayCopy
имеет решающее значение для производительности); - даже может означать изменение какого-либо изменяемого состояния (рассмотрим пример, когда первый вызов
toString
стоит дорого, поэтому он кэшируется изнутри для более быстрого вызова в будущем).
Так какая лучшая практика? Я все еще что-то пропустил?
Обновление: этот вопрос связан конкретно с toString
, который определен на каждом объекте JVM, поэтому я надеялся найти наилучшую практику, если она когда-либо существует.