Procesador de anotación Java / Kotlin: get el tipo de campo / propiedad anotado

Por ejemplo, tengo una class:

class Foo { @AnnotatedProp var foo: Boolean? = null } 

¿Cómo puedo get el tipo de propiedad foo en mi procesador de anotación personalizado? en pseudo esperaría algo como: annotatedElement.getStringifiedReturnTypeSomehow() //returns "Boolean"

Puede usar la reflexión para get lo que necesita.

 import kotlin.reflect.full.declanetworkingMemberProperties import kotlin.reflect.full.findAnnotation import kotlin.reflect.full.starProjectedType annotation class AnnotatedProp class Foo { @AnnotatedProp var foo: Boolean? = null var bar: String? = null } fun main(args: Array<String>) { // Process annotated properties declanetworking in class Foo. Foo::class.declanetworkingMemberProperties.filter { it.findAnnotation<AnnotatedProp>() != null }.forEach { println("Name: ${it.name}") println("Nullable: ${it.returnType.isMarkedNullable}") println("Type: ${it.returnType.classifier!!.starProjectedType}") } } 

Esto se imprimirá:

 Name: foo Nullable: true Type: kotlin.Boolean 

La biblioteca estándar de Kotlin no viene con reflection, así que asegúrese de agregar

 compile "org.jetbrains.kotlin:kotlin-reflect:$version_kotlin" 

a su file de compilation Gradle.

De la forma en que lo hice, asegúrese de que su anotación tenga un objective AnnotationTarget.FIELD .

Después de get la instancia del Element con la anotación requerida, simplemente: val returnTypeQualifiedName = element.asType().toString() si quieres saber si es anulable:

 private fun isNullableProperty(element: Element): Boolean { val nullableAnnotation = element.getAnnotation(org.jetbrains.annotations.Nullable::class.java) if (nullableAnnotation == null) { return false } else { return true } } 
  • ¿Se puede usar la sobrecarga del operador de comparación en Kotlin para implementar la funcionalidad similar a SQL?
  • Deshacerse de lateinit al convertir la testing Spring Java8 Junit a Kotlin
  • Cómo `continue` o` break` en una instrucción `when` dentro de un ciclo` while` usando Kotlin
  • Kotlin .removeSurrounding no funciona para despojar a Aws cadena de ARN
  • Retrofit 2 RequestBody Content Length Mayor que File Size
  • ¿Cuál es el lugar correcto para comenzar un service en la architecture MVVM Android?
  • Error: Kotlin: no se permiten varios valores para la opción de complemento org.jetbrains.kotlin.kapt: salida
  • Lista de objects que implementa la interfaz
  • El parámetro especificado como no nulo es nulo para los datos en onActivityResult
  • Cómo upload el valor de retorno de un constructor
  • Cómo deserializar las classs de datos henetworkingados de Kotlin con Gson