什么是开放的财产? 为什么我不能让自己的私人?

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(?)不是最终的 。 另一方面,它的gettersetter可以被它的子类覆盖

在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