¿Cómo usar anotaciones en Kotlin?
sobes.tech AI
Respuesta de la IA
Las anotaciones en Kotlin se utilizan para agregar metainformación a clases, propiedades, funciones, expresiones y parámetros. No realizan acciones directas, pero pueden ser utilizadas por el compilador, frameworks u otras bibliotecas para diferentes procesamientos.
Aspectos principales de uso:
-
Sintaxis: Las anotaciones se colocan antes del elemento al que se aplican, precedidas por
@. Si la anotación tiene parámetros, estos se especifican entre paréntesis después del nombre.@Deprecated("Usa newFunction en su lugar") fun oldFunction() { // ... } @JvmStatic fun staticMethod() { // ... } -
Aplicación a diferentes elementos: Las anotaciones pueden aplicarse a:
- Clases (
class):@Serializable class User(val name: String) - Propiedades (
val,var):@Inject lateinit var userRepository: UserRepository - Funciones (
fun):@Test fun testSomething() { // ... } - Parámetros de constructores/funciones:
fun processUser(@NotNull user: User) { // ... } - Expresiones:
fun calculate(@Ignore parameter: Int) { // ... } - Tipos (
@Target(AnnotationTarget.TYPE)):val list: @NotNull List<String> = emptyList()
- Clases (
-
Lugares de aplicación (Use-site Targets): Para desambiguar a qué elemento exactamente se aplica la anotación, cuando hay varias (por ejemplo, campo y getter), se utilizan use-site targets.
Target Descripción @file:Se aplica a todo el archivo @property:Se aplica a la propiedad completa @field:Se aplica al campo de respaldo (backing field) @get:Se aplica al getter de la propiedad @set:Se aplica al setter de la propiedad @param:Se aplica al parámetro del constructor @setparam:Se aplica al parámetro del setter de la propiedad @delegate:Se aplica a la instancia de la propiedad delegada @receiver:Se aplica al tipo receptor class Example(@field:Inject val dependency: Dependency) { // @field:Inject se aplica al campo 'dependency' } -
Declaración de anotaciones personalizadas: Las anotaciones propias se declaran con la palabra clave
annotation class. Los parámetros de la anotación pueden ser tipos primitivos, cadenas, clases (KClass), enumeraciones, otras anotaciones o arreglos de estos tipos.annotation class MyAnnotation(val value: String, val count: Int = 0) @MyAnnotation("Hola", count = 5) class AnnotatedClass { // ... } -
Meta-anotaciones: Las anotaciones pueden estar marcadas con meta-anotaciones que definen su comportamiento y aplicabilidad.
@Target: Indica qué elementos pueden ser anotados.@Retention: Indica en qué etapa de la vida la anotación está presente (SOURCE,BINARY,RUNTIME).@Repeatable: Permite aplicar la anotación varias veces al mismo elemento.@MustBeDocumented: Indica que la anotación debe ser parte de la API pública generada por la herramienta de documentación.
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) @Retention(AnnotationRetention.RUNTIME) annotation class ProcessedByFramework
Las anotaciones se usan ampliamente en Kotlin para integración con frameworks JVM (Spring, Android), serialización (Kotlinx.serialization), testing (JUnit) y creación de bibliotecas propias basadas en metainformación.