Kotlin – 在初始化时转换值

我是kotlin的新手,我想知道是否可以在初始化时转换内容值:以下示例:

@Document data class Category( @Id val id: Id? = null, val label: String ) 

类别是一个文件(MongoDB的实体),当我instanciating这个对象,我想变换大写的标签属性。 我怎样才能保持语言的惯用? 重点是保持val关键字的不变属性。

 val categ = Category(label = "Test") println(categ.label) // --> TEST 

谢谢。

您可以将“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或简单地添加一些文档;-)