Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

164
Vistas
Identificar clase personalizada en Kotlin

Estoy creando una biblioteca. En una de las funcionalidades, recibo un objeto y tengo que realizar una operación en los campos y guardarlos en un Mapa. El objeto puede tener un campo de tipo clase personalizada que nuevamente tendrá campos y, en ese caso, necesitaré un hashmap anidado. Para hacer eso, tendré que llamar a mi función de forma recursiva si el tipo de campo en una clase personalizada.

Ahora el problema es, ¿cómo verificaré si el tipo de campo es una clase personalizada o no? Ahora mismo lo estoy haciendo por nombre de paquete, pero tengo que generalizarlo.

 private fun getAllFields(`object`: Any): MutableMap<String, Any> { val map: MutableMap<String, Any> = HashMap() val internalMap: MutableMap<String, Any> = HashMap() for (field in `object`::class.java.declaredFields.toMutableList()) { field.isAccessible = true if (field.type.name.contains("com.example")) { internalMap.putAll(getAllFields(field.get(`object`))) }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Como está usando la reflexión, podría introducir una anotación:

 package org.your.library @Target(AnnotationTarget.CLASS) @Retention(AnnotationRetention.RUNTIME) annotation class YourCoolAnnotation

Que luego pueden usar los usuarios de su biblioteca para anotar las clases que desean anidar:

 package com.example.libraryuser @YourCoolAnnotation class MyCustomClass

Entonces puedes reemplazar tu:

 if (field.type.name.contains("com.example")) {

Con:

 if (field.type.isAnnotationPresent(YourCoolAnnotation::class.java)) {

También puede especificar que la anotación solo se use en los campos, lo que haría que esto fuera mucho más dinámico:

 @Target(AnnotationTarget.PROPERTY) @Retention(AnnotationRetention.RUNTIME) annotation class YourCoolAnnotation

y luego verifique si el campo tiene la anotación y no el tipo en sí:

 if (field.isAnnotationPresent(YourCoolAnnotation::class.java)) {
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda