es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo expresar el argumento de anotación de arreglo en Kotlin?

Cuando una anotación tiene un argumento de tipo array con tipos básicos como String o Int, es fácil saber cómo usarlo:

public @interface MyAnnotation{
  String[] props();
}

@MyAnnotation(props = {"A", "B", "C"})
class Foo {}

Desafortunadamente, esto no funciona para valores que son anotaciones en sí mismas.

Un ejemplo de esto es org.springframework.context.annotation.PropertySources:

public @interface PropertySources {
  PropertySource[] value();
}

public @interface PropertySource { 
  String[] value();
}

En la sintaxis de Java, el uso sería:

@PropertySources({
    @PropertySource({"A", "B", "C"}),
    @PropertySource({"D", "E", "F"}),
})
class Foo{}

Sin embargo, en Kotlin, el código con un enfoque similar no se compila:

@PropertySources([
    @PropertySource(["A", "B", "C"]),
    @PropertySource(["D", "E", "F"]),
])
class Foo{}

¿Cómo se puede expresar esta construcción de anidamiento de array en Kotlin?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    En Kotlin, al tratar con arreglos de anotaciones anidadas con tipos básicos, puedes utilizar el mismo enfoque que en Java utilizando llaves para definir el arreglo de anotaciones interno:

    @PropertySources(
        [PropertySource(["A", "B", "C"]), PropertySource(["D", "E", "F"])]
    )
    class Foo {}
    

    Entonces, la principal diferencia es que en Kotlin, en lugar de usar llaves para el arreglo de anotaciones externo, se utilizan corchetes. Y para el arreglo de anotaciones interno, se utilizan llaves como en Java.

Comments are closed.