Зачем получать класс в Котлин, используя двойную двоеточие (: :)?

Мы знаем, что double-colon ( :: используется для получения ссылки на функцию (вызываемой) в Kotlin, например String::compareTo , "string"::compareTo .

В Java мы используем SomeClass.class и someInstance.getClass() чтобы получить класс. Почему в Kotlin мы используем SomeClass::class и someInstance::class а class не является функцией / методом?

 println(String::compareTo) // output: fun kotlin.String.compareTo(kotlin.String): kotlin.Int println("string".compareTo("strong")) // output: -6 println(String::class) // output: class kotlin.String println("string".class) // compile error 

В Котлине вы можете написать Object::class , который даст вам KClass. KClass не эквивалентен классу Class, который мы знаем из Java. Если вы хотите получить класс Java Class, вы можете написать Object::class.java – ie: println("string"::class.java)

Также в java, .class не является методом или членом – это специальная директива для компилятора для доступа к классу. Я думаю, что каждый язык выбирает синтаксис, который имеет для него наибольший смысл, и создатели kotlin решили использовать ::