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 .