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

283
Vistas
Recolectando los valores en la interfaz a un mapa

Tengo una interfaz que almacena las banderas de las funciones que estaban habilitadas o no y que tiene una función para devolver los valores actuales de las propiedades en este mapa:

 interface IModuleEnabler { val module_1_parameter_1: Boolean val module_1_parameter_2: Boolean val module_1_parameter_3: Boolean val module_2_parameter_1: Boolean val module_2_parameter_2: Boolean val module_2_parameter_3: Boolean fun getPropertiesMap(): Map<String, List<Pair<String, Boolean>>> { var propertiesMap: Map<String, List<Pair<String, Boolean>>> = mutableMapOf() var properties = listOf<Pair<String, Boolean>>( Pair<String, Boolean>("module_1_parameter_1", module_1_parameter_1), Pair<String, Boolean>("module_1_parameter_2", module_1_parameter_2), Pair<String, Boolean>("module_1_parameter_3", module_1_parameter_3) ) propertiesMap = propertiesMap.plus("Module1" to properties) return propertiesMap } }

Esta interfaz tiene una clase predeterminada, que la implementa y la clase personalizada basada en el valor predeterminado para anular los valores predeterminados, si es necesario. Sin embargo, el problema es que la función getPropertiesMap() siempre tiene los valores predeterminados y no los anulados. ¿Hay alguna forma de forzar la actualización de esta función para tener los valores reales? Enlace al parque infantil - Kotlin Playground

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Esto se debe a que CustomFeatureEnabler delega getPropertiesMap a DefaultFeatureEnabler . Puede solucionarlo anulando getPropertiesMap en las clases en las que usa la delegación

 class CustomFeatureEnabler : IModuleEnabler by DefaultFeatureEnabler() { override val module_1_parameter_3: Boolean get() = true override val module_2_parameter_1: Boolean get() = true override fun getPropertiesMap() = super.getPropertiesMap() // <--- }

https://kotlinlang.org/docs/delegation.html#overriding-a-member-of-an-interface-implemented-by-delegation

over 4 years ago · Santiago Trujillo Denunciar

0

Esta es una deficiencia de los delegados en Kotlin. Las funciones en el delegado no tienen conocimiento de la clase que lo está usando como delegado e ignorará las funciones anuladas en esa clase.

Sería mejor implementar su función getPropertiesMap como una función de extensión para que no se pueda anular. Esto solucionará su problema, pero es una mejor práctica de todos modos. Cuando lo tienes definido dentro de tu interfaz, se deja open y prácticamente invita a los usuarios a anularlo. Además, está utilizando una especie de forma enrevesada de crear un mapa.

 fun IModuleEnabler.getPropertiesMap(): Map<String, List<Pair<String, Boolean>>> { val properties = listOf( Pair("module_1_parameter_1", module_1_parameter_1), Pair("module_1_parameter_2", module_1_parameter_2), Pair("module_1_parameter_3", module_1_parameter_3) ) return mapOf("Module1" to properties) }

Lo haría sin toda la anulación y la delegación de todos modos. Permita que la implementación predeterminada establezca los valores del constructor. La implementación personalizada puede simplemente llamar al superconstructor con los diferentes valores que desee.

 open class DefaultFeatureEnabler( override val module_1_parameter_1: Boolean = false, override val module_1_parameter_2: Boolean = false, override val module_1_parameter_3: Boolean = false, override val module_2_parameter_1: Boolean = false, override val module_2_parameter_2: Boolean = false, override val module_2_parameter_3: Boolean = false ): IModuleEnabler class CustomFeatureEnabler: DefaultFeatureEnabler( module_1_parameter_3 = true, module_2_parameter_1 = true )
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