Ось кілька причин, які можуть бути для вас більш-менш переконливими, залежно від ваших власних уподобань:
Не просто знижуйте його за те, що він "синтаксичний цукор". Хоча ви можете сказати, що щось є просто синтаксичним цукром, адже саме цукор підсолоджує ваше життя - як програміст так само, як і кавоварка або чайник.
Синглтони - кожна Скала object
за своєю суттю є одинаком. Враховуючи те, що в світі Java люди реалізують одиночні букви всілякими різними способами і частіше за все роблять помилку в їх здійсненні, ви не можете зробити помилку настільки простою, як у Scala. Писання object
замість цього class
робить його однотонним, і ви закінчили.
Доступ до статичних методів: Статичні методи на Java можуть бути доступні з об'єктів. Наприклад, припустимо, у вас є клас C
зі статичним методом f
та об'єктом c
типу C
. Тоді вам слід зателефонувати C.f
, але Java дозволяє (хоча з попередженням) використовувати c.f
, що, коли ви переходите з фонового зображення Scala, насправді не має сенсу, тому що об'єкти не мають методу f
насправді.
Чітке розділення: у Java ви можете змішувати статичні та нестатичні атрибути та методи у класі. Якщо ви працюєте дисципліновано, це не стане проблемою, однак, якщо ви (чи хтось інший з цього питання) цього не зробите, ви закінчите статичні та нестатичні частини переплетені, і це важко швидко сказати що статично, а що ні. У Scala все, що знаходиться всередині супутнього об’єкта, зрозуміло, не є частиною об'єктів виконання відповідного класу, але доступне зі статичного контексту. І навпаки, якщо він записаний всередині класу, він доступний для примірників цього класу, але не зі статичного контексту. Це стає особливо обтяжливим для Java, коли ви починаєте додавати статичні та нестатичні блоки ініціалізаторів у свій клас. Це може бути дуже важко зрозуміти з точки зору динамічного порядку виконання.
Менший код: Вам не потрібно додавати слово статичний до кожного атрибута чи методу в object
, таким чином, зберігаючи код більш стислим (справді, це не є помітною перевагою).
Недоліки знайти набагато складніше. Можна стверджувати, що статична та нестатична частини повинні належати разом, але розділені концепцією Scala супутніх об'єктів. Наприклад, дивним є діаграма класів, але потім у коді потрібно створити дві речі та розсікати, який атрибут куди йде.