web-dev-qa-db-fra.com

comment utiliser des annotations printanières telles que @Autowired ou @Value dans kotlin pour les types primitifs?

Câblage automatique d’un non-primitif avec des annotations de type printemps

@Autowired
lateinit var metaDataService: MetaDataService

travaux.

Mais ça ne marche pas:

@Value("\${cacheTimeSeconds}")
lateinit var cacheTimeSeconds: Int

avec une erreur: 

le modificateur lateinit n'est pas autorisé pour les types primitifs.

Comment transférer automatiquement des propriétés primitives dans des classes kotlin?

8
fkurth

@Value ("\ $ {cacheTimeSeconds}") lateinit var cacheTimeSeconds: Int

devrait être

@Value("\${cacheTimeSeconds}")
val cacheTimeSeconds: Int? = null
10
qwert_ukg

Kotlin compile Int à int en code Java. Spring voulait des types non primitifs pour injection, vous devriez donc utiliser Int?/Booléen?/Longue? et etc. Les types nullables que kotlin compile en Integer/Boolean/etc.

0
Eduard Kornev

Le problème n’est pas l’annotation, mais le mélange de primatif et de Lateinit, comme le dit la question { this } _, Kotlin ne permet pas les primatives de Lateinit. 

Le correctif serait de passer à un type nullable Int? ou de ne pas utiliser lateinit

This TryItOnline montre le problème.

0
jrtapsell