модификатор 'lateinit' недопустим в свойствах примитивных типов - Котлин - PullRequest
0 голосов
/ 10 декабря 2018

Я получаю сообщение об ошибке при попытке присвоить значение переменной среды переменной lateinit.Ошибка "модификатор 'lateinit' недопустим в свойствах примитивных типов" .

My application.properties (чтение переменной среды)

my.property.from.properties.file=true

MyServiceкласс:

@Component
class MyService @Autowired constructor(
    private val someService: SomeService) {

    @Value("\${my.property.from.properties.file}")
    private lateinit var myBooleanEnabled: Boolean

Присвоение ему значения не решает проблему.Например, с

private lateinit var myBooleanEnabled: Boolean = true

я получаю 2 ошибки:

  • модификатор 'lateinit' не разрешен для свойств примитивных типов
  • Модификатор 'lateinit' недопустим в свойствах с инициализатором

Для того, что я прочитал, мне нужен делегированный (https://kotlinlang.org/docs/reference/delegated-properties.html), но я не мог понять его полностьюКроме того, я не хочу писать другой метод для установки свойства, если есть «более чистое» решение. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Вы можете использовать инжектор конструктора, как показано ниже.Если вы используете Spring 4.3+, вам не нужна аннотация @Autowired.В документации Spring есть некоторые рекомендации по этому вопросу:

https://docs.spring.io/spring/docs/current/spring-framework-reference/languages.html#injecting-dependencies

@Component
class MyService(
    private val someService: SomeService,
    @Value("\${my.property.from.properties.file}")
    private val myBooleanEnabled: Boolean)
0 голосов
/ 10 декабря 2018

Самое простое - определить myBooleanEnabled как обнуляемый и удалить lateinit

private var myBooleanEnabled: Boolean? = null

В этом случае он не будет интерпретироваться как примитив boolean в байт-коде.

Однако, в вашем случае, я бы предложил инжектор конструктора.

...