Kotlin - 在初始化时转换价值

时间:2017-12-05 08:17:35

标签: kotlin

我是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

感谢。

1 个答案:

答案 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或只是添加一些文档; - )