Kotlin构造器中private val与val的差异及推荐用法
Kotlin构造器中private val与val的差异分析
针对你给出的Spring Service代码场景,构造器里用private val和val定义依赖参数的核心差异集中在属性可见性和封装性上,具体如下:
可见性范围不同
用val定义时,生成的recordRepository属性默认是public可见性,外部类拿到RecordService实例后,能直接访问这个属性(比如recordService.recordRepository.findById(...));而private val定义的属性仅在RecordService内部可见,外部完全无法直接访问。对代码封装性的影响不同
val的写法会破坏封装原则:Service层的核心职责是处理业务逻辑,数据访问的细节本应被隐藏。把Repository暴露给外部,会让外部代码直接依赖数据层实现,导致业务逻辑和数据访问耦合度升高,后续修改Repository的接口或实现时,可能牵连到外部调用方。private val则符合面向对象的封装思想,只在Service内部使用依赖,对外只暴露IRecordService定义的业务接口,外部不需要知道Service内部依赖了什么,降低耦合度,也便于后续维护。推荐用法
绝大多数Spring项目场景下,优先用private val。除非你有特殊需求(比如需要让子类继承该Service并访问这个Repository,但一般不建议Service层做继承扩展),否则不要用val暴露内部依赖。
内容的提问来源于stack exchange,提问作者Jesser
相关产品推荐
相关产品推荐

