Kotlin è un linguaggio orientato agli oggetti. In un linguaggio orientato agli oggetti, qualcosa che non è un oggetto è una limitazione invalidante estremamente . Le classi non sono oggetti, ma oggetti sono oggetti (duh!), Quindi la domanda dovrebbe essere piuttosto: perché una lingua non usa oggetti complementari?
Un altro aspetto è la semplicità: perché due cose, oggetti con membri di istanza e classi con membri statici quando puoi semplicemente avere oggetti con membri di istanza?
Un'alternativa che viene usata in molte lingue derivate da Smalltalk, è di rendere le classi stesse oggetti. Per esempio. nelle classi Smalltalk sono istanze di una gerarchia parallela di metaclasses . In Ruby, le classi sono istanze della classe Class
(e sì, ciò significa che Class
è un'istanza di se stesso). In tal caso, i "metodi di classe" sono in realtà solo normali metodi di istanza del metaclasse della classe. Non so perché questo progetto non è stato scelto in Java (dato il suo stretto rapporto con Smalltalk), ma potrebbe avere qualcosa a che fare con la semplificazione del sistema di tipi (si noti che la maggior parte delle lingue con classi-come-oggetti tendono ad essere lingue dinamiche).