我是kotlin的新手,我想知道我们是否可以在初始化时转换内容值:使用此示例:
@Document
data class Category(
@Id val id: Id? = null,
val label: String
)
类别是一个文档(mongodb的实体),当我实现这个对象时,我想以大写形式转换label属性。我怎么能这样做以保持语言的惯用语?关键是要保留val
关键字的不可变属性。
val categ = Category(label = "Test")
println(categ.label) // --> TEST
感谢。
答案 0 :(得分:2)
您可以封装" upperCasing"进工厂:
data class Category constructor(val label: String) {
init {
if (label != label.toUpperCase()) {
throw IllegalStateException("Label must be uppercase")
}
}
companion object {
fun createInstance(str: String) = Category(str.toUpperCase())
}
}
init
块确保客户不会使用非上标签创建不需要的实例(应记录在案)。
创建一个这样的实例:
val instance = Category.createInstance("xy")
如果参数不是大写的,您可能希望通过相应地命名工厂来明确表示您进行转换,例如: withTransformedLabel
或只是添加一些文档; - )