我有一个班级发言-
@Component
open class Foo @Autowired constructor(bar: Bar) {
private val myList = listOf(1,2,3)
open fun readFirst() {
println(myList[0])
}
fun readAll() {
myList.forEach { i -> println(i) }
}
}
方法readFirst可以正常工作,并且能够访问myList,但方法readAll会为myList引发空指针异常。
如果我打开readAll或通过删除open关键字来使类和readFirst final成为可能,那么它也可以正常工作。
这是否有原因,或者这是一个错误。
注意:这不是失败的确切代码,但这是发生情况的一个示例。
答案 0 :(得分:0)
这可能是因为Spring框架通过创建隐藏的子类和覆盖方法来发挥其魔力。
与Java不同,Kotlin对于类和方法默认为非开放式(Java称为final
),并且需要open
关键字才能将它们打开。通常,这是一件好事™,但正如您发现的那样,会破坏Spring。
解决此问题的一种方法是将所有此类和方法标记为open
。
但是使用compiler plug-in更容易。这样会自动打开所有使用特定Spring注释的类。