Reflexión de Kotlin

Reflection es un conjunto de funciones de lenguaje y biblioteca que proporciona la función de introspección de un programa dado en tiempo de ejecución. La reflexión de Kotlin se usa para utilizar la clase y sus miembros como propiedades, funciones , constructores , etc. en tiempo de ejecución. 
Junto con la API de reflexión de Java, Kotlin también proporciona su propio conjunto de API de reflexión, en un estilo simple y funcional. Las construcciones estándar de Java Reflection también están disponibles en Kotlin y funcionan perfectamente con su código. 
Los reflejos de Kotlin están disponibles en: 

kotlin.reflect package

Características de la reflexión de Kotlin:

  1. Da acceso a propiedades y tipos anulables.
  2. La reflexión de Kotlin tiene algunas características adicionales a la reflexión de Java.
  3. El reflejo de kotlin ayuda a acceder al código JVM, escrito por un lenguaje 

Referencias de clase –

Para obtener una referencia de clase en tiempo de ejecución que se conoce estáticamente, utilice el operador de referencia de clase . Además, la referencia a una clase también se puede obtener de las instancias de la clase, dichas referencias se conocen como referencias de clase acotadas . Utilizando instancias, se obtiene la referencia al tipo exacto al que se ajusta el objeto, en caso de herencia. 
Ejemplo para demostrar las referencias de clase 

Java

// A sample empty class
class ReflectionDemo {
}
 
fun main()
{
    // Reference obtained using class name
    val abc = ReflectionDemo::class
    println("This is a class reference $abc")
 
    // Reference obtained using object
    val obj = ReflectionDemo()
    println("This is a bounded class reference ${obj::class}")
}

Producción 

This is a class reference class kotlin1.com.programmingKotlin.chapter1.ReflectionDemo
This is a bounded class reference class kotlin1.com.programmingKotlin.chapter1.ReflectionDemo 

Referencias de funciones –

Podemos obtener una referencia funcional para cada función nombrada que se define en Kotlin. Esto se puede hacer precediendo el nombre de la función con el operador :: . Estas referencias funcionales se pueden utilizar como parámetros para otras funciones. En el caso de funciones sobrecargadas, podemos especificar explícitamente el tipo de función o puede determinarse implícitamente a partir del contenido.
Ejemplo para demostrar referencias funcionales 

Java

fun add(a: Int,b: Int) : Int{
    return a+b;
}
  
fun add(a: String,b: String): String{
    return """$a$b"""
}
  
fun isDivisibleBy3(a: Int): Boolean{
    return a%3 == 0
}
fun main(){
    // Function reference obtained using :: operator
    val ref1 = ::isDivisibleBy3
    val array = listOf<Int>(1,2,3,4,5,6,7,8,9)
    println(array.filter(ref1))
  
    // Function reference obtained for an overloaded function
    // By explicitly specifying the type
    val ref2: (String,String) -> String = ::add;
    println(ref2)
  
    // Function reference obtained implicitly
    val x = add(3,5)
    println(x)
}

Producción 

[3, 6, 9]
fun add(kotlin.String, kotlin.String): kotlin.String
8 

Referencias de propiedades –

Podemos obtener la referencia de la propiedad de manera similar a la de la función, usando el operador :: . Si la propiedad pertenece a una clase, el nombre de la clase también debe especificarse con el operador :: . Estas referencias a propiedades nos permiten tratar una propiedad como un objeto, es decir, podemos obtener sus valores usando la función get o modificarlos usando la función set.
Ejemplo para demostrar referencias de propiedad 

Java

class Property(var a: Float){
}
  
val x = 10;
  
fun main(){
    // Property Reference for a package level property
    val z = ::x
    println(z.get())
    println(z.name)
  
    // Property Reference for a class property
    val y = Property::a
    println(y.get(Property(5.899f)))
}

Producción 

10
x
5.899 

Referencias de constructores –

Las referencias a constructores de una clase se pueden obtener de manera similar a las referencias a métodos y propiedades. Estas referencias se pueden usar como referencias a una función que devuelve un objeto de ese tipo. Sin embargo, estos usos son raros.
Ejemplo para demostrar las referencias de constructores 

Java

class Property(var a: Float){
}
fun main(){
    // Constructor Reference
    val y = ::Property
    println(y.name)
}

Producción 

<init>

Publicación traducida automáticamente

Artículo escrito por CharchitKapoor y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *