kotlin 中 构造函数中参数修饰符 val

19 阅读1分钟

在 Kotlin 中,[class] 构造函数参数使用 val 修饰符与不使用有以下区别:

val 修饰符

class ChatWebView(val editor: Editor, val messageHandler: (event: Events.FromChat) -> Unit)
  • 自动创建属性:Kotlin 会自动为带 val 的参数创建同名的只读属性
  • 可直接访问:在类内部可以直接通过 editormessageHandler 访问这些参数
  • 对外暴露:这些属性成为类的公共 API 的一部分,可以从类外部访问

不带 val 修饰符

class ChatWebView(editor: Editor, messageHandler: (event: Events.FromChat) -> Unit)
  • 仅作为构造参数:参数只在构造函数中可用
  • 不可直接访问:在类内部无法直接访问这些参数(除非手动赋值给成员变量)
  • 不会创建属性:不会自动生成类的属性

在 [ChatWebView] 中的实际应用

在当前的 ChatWebView 类中:

class ChatWebView(val editor: Editor, val messageHandler: (event: Events.FromChat) -> Unit) : Disposable

使用 val 的好处包括:

  1. 方便访问:类内部多处使用了 editor 属性,例如:

    • editor.project
    • editor.getUserConfig()
    • editor.getActiveFileInfo()
  2. 简化代码:无需手动声明和初始化成员变量

  3. 暴露接口:允许其他类通过 chatWebView.editorchatWebView.messageHandler 访问这些属性

如果不使用 val,则需要手动声明成员变量:

class ChatWebView(editor: Editor, messageHandler: (event: Events.FromChat) -> Unit) : Disposable {
    private val editor: Editor
    private val messageHandler: (event: Events.FromChat) -> Unit
    
    init {
        this.editor = editor
        this.messageHandler = messageHandler
    }
}

因此,使用 val 使代码更简洁且易于维护。