Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

280
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda