Котлин - объектно-ориентированный язык. В объектно-ориентированном языке то, что не является объектом, является крайне вредным ограничением. Классы не являются объектами, но объекты являются объектами (дух!), Поэтому следует задать вопрос: почему язык не использует сопутствующие объекты?
Другим аспектом является простота: зачем иметь две вещи: объекты с членами экземпляра и классы со статическими членами, когда вы можете просто иметь объекты с членами экземпляра?
Альтернатива, которая используется во многих языках, производных от Smalltalk, состоит в том, чтобы самим создавать объекты. Например, в классах Smalltalk есть экземпляры параллельной иерархии метаклассов . В Ruby классы являются экземплярами Class
класса (и да, это означает, что Class
это экземпляр самого себя). В этом случае «методы класса» на самом деле являются обычными методами экземпляра метакласса класса. Я не знаю, почему этот дизайн не был выбран в Java (учитывая его близость к Smalltalk), но он может иметь какое-то отношение к упрощению системы типов (обратите внимание, что большинство языков с классами-как-объектами имеют тенденцию быть динамические языки).