Я пытаюсь использовать kotlin в своем проекте java8 spring. Я делаю это, заменяя классы (java-> kotlin) один за другим.
Один из моих классов в Finder:
У Finder.java есть такая структура:
@Compoment class Finder { private SomeObject someObject; Finder() { someObject = new SomeObject(); } public void doSomething() { //aspect looks here someObject.do(); } }
Я заменил его Finder.kt
@Compoment open public class Finder { private val someObject : SomeObject constructor() { someObject = SomeObject() } public fun doSomething() { //aspect looks here someObject.do() //NPE here } }
В то время как debuggind, я обнаружил, что constuctor был вызван, someObject был создан при создании экземпляра Finder. Но созданный экземпляр класса FinderEnhancerBySpring был автоматически добавлен к экземпляру Detector. Он не был инициализирован, поэтому у меня есть NPE, когда я пытаюсь получить доступ к someObject.
Кроме того, класс Finder имеет другие поля с автопрокруткой (для упрощения кода, который я не написал здесь), они также не были инициализированы.
UPD: Я нашел аспект в методе Finder. Когда я удалю его, введите autwired instance, который стал Finder (не FinderEnhancerBySpring) и полностью инициализирован.
Что здесь может быть не так? (0,13.1514 – версия ктлин)
Все методы kotlin являются окончательными (говорящими java) по умолчанию, поэтому я должен разрешить переопределять его с открытым ключевым словом:
public open fun doSomething() { //aspect looks here someObject.do() }