Kotlin中如何正确构建含非空与可空字段的类?
更简洁的Kotlin实现方案
兄弟,你说得太对了——这种重复一堆参数的次构造函数写法确实够冗余的,完全不符合Kotlin追求简洁的调性。其实咱们用主构造函数+默认参数就能完美解决这个问题,根本不需要写次构造函数!
优化后的代码
import utilities.Constants import java.util.* class Action( val key: String, val date: Date, val stringValue: String, val autoRecognitionStatus: Constants.MeasurementAutoRecognized, val recognitionId: String, val method: Constants.MeasurementMethod, val userKey: String, val userName: String, val isInRange: Boolean, var pictureUrl: String? = null, // 给可空参数添加默认值null var remotePictureUrl: String? = null // 同样配置默认值 )
为什么这更优?
- 彻底消除冗余:不用再重复写一堆参数来委托主构造函数,代码量直接减少一半,维护成本也低了很多
- 调用更灵活:
- 只传必填的非空参数:
Action(key, date, ..., isInRange) - 传递部分可选参数(推荐用命名参数,可读性拉满):
Action(key, date, ..., isInRange, pictureUrl = "local/path.jpg") - 传递所有参数:
Action(key, date, ..., isInRange, pictureUrl = "local.jpg", remotePictureUrl = "remote.jpg")
- 只传必填的非空参数:
- 符合Kotlin最佳实践:Kotlin设计的初衷就是用默认参数替代Java风格的重载构造函数,让代码更简洁直观
如果你的pictureUrl和remotePictureUrl不需要后续修改,也可以把它们改成val,这样类的不可变性更好,更符合数据类的设计思路(不过看你原来的代码用了var,应该是需要修改的,保持var就好)。
内容的提问来源于stack exchange,提问作者vlatkozelka
相关产品推荐
相关产品推荐

