java - una - kotlin clases y objetos
¿Por qué obtener clase en Kotlin usando dos puntos(::)? (2)
Sabemos que los dos puntos dobles ( :: se utilizan para obtener la referencia de la función (llamable) en Kotlin, por ejemplo, String::compareTo , "string"::compareTo .
En Java usamos SomeClass.class y someInstance.getClass() para obtener la clase. ¿Por qué en Kotlin usamos SomeClass::class y someInstance::class mientras que la class no es una función / método?
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
En Kotlin puedes escribir Object::class , que te dará un KClass . KClass no es equivalente a la clase Clase que conocemos de Java. Si desea obtener la clase de clase Java, puede escribir Object::class.java - ie: println("string"::class.java)
También en java, .class no es un método o un miembro, es una directiva especial para que el compilador acceda a la clase. Creo que cada idioma selecciona la sintaxis que tiene más sentido para ella, y los creadores de kotlin decidieron usar ::
:: en Kotlin se trata de meta-programación, incluyendo referencias de métodos, referencias de propiedades y literales de clase. Ver discusión sobre literales de clase .