如何在Kotlin中初始化与构造器参数同名的类变量?
在Kotlin中区分同名的类成员与构造器参数
在Kotlin里,你可以和C#一样用this.来指代类的成员变量,以此区分同名的构造器参数。下面是对应你给出的C#代码的实现方式,以及几种更符合Kotlin风格的写法:
1. 与C#写法最接近的次构造器实现
直接使用this.成员名明确指向类的成员变量,逻辑和C#完全一致:
class Product { lateinit var productName: String constructor(productName: String) { this.productName = productName } }
2. 更简洁的Kotlin主构造器写法
Kotlin推荐用主构造器简化代码,你可以直接在主构造器中用var(可变)或val(只读)声明成员变量,无需单独写lateinit和赋值逻辑:
// 一行代码完成类的定义,自动将参数转为类成员并赋值 class Product(var productName: String)
3. 主构造器+初始化块的场景(适合需要额外逻辑的情况)
如果需要在赋值前做额外处理,或者成员变量是只读的val,可以用初始化块配合this.:
class Product(productName: String) { val productName: String init { // 这里可以添加额外的校验或处理逻辑 this.productName = productName } }
总结:Kotlin中this的作用和C#一致,当参数与类成员同名时,this.成员名指向类的成员,直接写变量名则指向构造器参数。如果没有特殊逻辑,优先使用主构造器直接声明成员变量的写法,更符合Kotlin的简洁风格。
内容的提问来源于stack exchange,提问作者Risen Star
相关产品推荐
相关产品推荐

