2015-09-26 2 views
1

Я пытаюсь использовать kotlin в проекте java8 spring. Я делаю это, заменяя классы (java-> kotlin) один за другим.Первоначальная инициатива класса 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, I» ve found, что constuctor был вызван, someObject был создан при создании экземпляра Finder. Но созданный экземпляр класса FinderEnhancerBySpring был автоматически добавлен к экземпляру Detector. Он не был инициализирован, поэтому у меня есть NPE, когда я пытаюсь получить доступ к someObject.

Кроме того, класс Finder имеет другие поля с автопрокруткой (для упрощения кода, который я не написал здесь), они также не были инициализированы.

UPD: Я нашел аспект в методе Finder. Когда я удалю его, введите autwired instance, который стал Finder (не FinderEnhancerBySpring) и полностью инициализирован.

Что может быть неправильным здесь? (0.13.1514 - Котлин версия)

ответ

1

Все Котлин методы являются окончательными (говоря Java) по умолчанию, так что я позволить overide это с открытым ключевым словом:

public open fun doSomething() { //aspect looks here 
    someObject.do() 
} 
+1

Было ли это решение проблема? Если это так, вы можете принять свой собственный ответ, чтобы этот вопрос казался более «выполненным», –

Смежные вопросы