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

390
Visualizações
Usando propiedades lateinit en constructor en kotlin

¿Cómo puedo usar las propiedades lateinit en mi constructor de clase?

Tengo un componente de resorte que uso para configurar y acceder a una biblioteca de terceros así:

 @Service class LibProxy { @Value("\${lib.someProperty}") private lateinit var someProperty: String final var lib: Lib init { lib = Lib(someProperty) } }

Esto da un

 kotlin.UninitializedPropertyAccessException: lateinit property someProperty has not been initialized

¿Cómo se supone que se debe hacer esto?

Me gustaría evitar construcciones como esta:

 @Service class LibProxy { @Value("\${lib.someProperty}") private lateinit var someProperty: String private var lib: Lib? = null getLib(): Lib { if (lib == null) { lib = Lib(someProperty) } return lib ?: Lib(someProperty) } }
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Según el comentario de JEY . Así es como se supone que debe hacerse:

 @Service class LibProxy(@Value("\${lib.someProperty}") private val someProperty: String) { final var lib: Lib init { lib = Lib(someProperty) } }
over 4 years ago · Santiago Trujillo Relatório

0

Dos posibilidades aquí:

La más fácil es reemplazar el bloque de inicio con @PostConstruct init Spring llamará a esto una vez, después de que se haya construido el objeto (y, por lo tanto, los valores de conexión automática estén todos configurados). Por ejemplo:

 @PostConstruct private fun initialise() { lib = Lib(someProperty) }

El otro es hacer arreglos para que la propiedad autocableada se pase en un constructor, no se establezca como una propiedad (según otras respuestas).

Un enfoque que funciona bien, especialmente si tiene varias propiedades de configuración, es tener una clase central que las almacene:

 @ConfigurationProperties("lib") class ConfigProperties { var someProperty = "defaultValue" // …and other properties… }

Esto establecerá someProperty desde un valor "lib.someProperty" en un archivo de configuración (o dejado como "defaultValue" si no está presente).

Luego puede autoconectar su instancia en el constructor, por ejemplo:

 class SomeService @Autowired constructor( private val configProperties: ConfigProperties) { init { lib = Lib(configProperties.someProperty) } }

(La centralización de las propiedades también puede hacer que sea más fácil encontrar qué propiedades están disponibles).

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