什么是开放的财产? 为什么我不能让自己的私人?
Kotlin的房地产和开放式房产之间有什么区别? 下面的代码抱怨我声明setter 私有和Intellij说私人 setter不允许打开属性。 什么是开放的财产?
@RestController open class ParameterController { @Autowired lateinit var parameterRepository: ParameterRepository private set //error }
为什么上面的代码无效,但是这个代码是?
open class ItemPrice{ lateinit var type: String private set // ok }
编辑:我使用spring-allopen插件,并明确标记类作为打开没有区别。
什么是开放的财产?
一个开放的属性,这意味着它的getter / setter(?)不是最终的 。 另一方面,它的getter & setter可以被它的子类覆盖 。
在kotlin中,除了接口 , 注解类 , 密封类 , 枚举类 , 变量 ,可变属性后台字段和参数外,所有东西都用final关键字声明,但是不变的变量和参数是有效的 。
由于allopen
插件将使所有的属性和方法在spring组件中打开 。
然而,一个开放的财产不能成为一个私人二传手,如果该财产被打开 ,例如:
//v--- allopen plugin will remove all `final` keyword, it is equivalent to `open` open var value: String=""; private set // ^--- ERROR:private set are not allowed
因此,您必须明确地确定财产,例如:
//v--- makes it final explicitly by `final` keyword final var value: String =""; private set