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 

谢谢。

One Solution collect form web for “Kotlin – 在初始化时转换值”

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

  • 在Instant App中应用插件“kotlin-android”会导致“null不能转换为非空types的com.android.build.gradleBasePlugin”
  • SpringBoot + Jackson + Kotlin数据类:字段注释被忽略
  • 为什么这个Kotlin代码仍然需要? 访问成员?
  • EvaluateJavaScript只允许返回types的字符串?
  • 带有Java接口的Kotlin EJB抛出UndeclaredThrowableException
  • 如何获得.kt文件中的所有类的列表
  • 如何将数据添加到Kotlin对象并在Vuejs页面上获取
  • 带有Kotlin错误的libGDX“org.jetbrains.kotlin.kapt.idea.KaptModelBuilderService”
  • 匕首2将活动视图模型注入片段
  • 当使用Maven编译时,类路径条目指向一个不存在的位置警告
  • 无法让TextArea滚动到底部
  • Kotlin language will be the best programming language for Android.