Kotlin – Transforma el valor en la initialization

Soy nuevo en kotlin y quiero saber si podemos transformar un valor de contenido en la initialization: con este ejemplo:

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

La categoría es un documento (entidad para mongodb) y cuando estoy instanciando este object, quiero transformar la propiedad de la label en mayúsculas. ¿Cómo puedo hacer eso para mantenerme idiomático con el idioma? El punto es mantener las properties inmutables de la palabra key val .

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

Gracias.

Puede encapsular el "upperCasing" en una fábrica:

 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()) } } 

El bloque init garantiza que los clientes no creen instancias no deseadas con tags que no sean superiores (que deberían estar documentadas).

Crea una instancia como esta:

val instance = Category.createInstance("xy")

Es posible que desee withTransformedLabel explícitamente que realiza transformaciones si el parámetro ya no está en mayúsculas nombrando a la fábrica en consecuencia, por ejemplo, withTransformedLabel o simplemente agregue alguna documentation 😉

  • ¿Cómo serializar / deserializar una matriz de objects personalizados en Kotlin?
  • No se puede cargar un file en Android y no hay detalles de un error
  • Al usar setcontentview en un BottomsheetDialog se produce un error como "ninguna de las siguientes funciones se puede invocar con los arguments suministrados"
  • ¿Cómo declarar parámetro como function sin valor de retorno?
  • kotlin dagger - falla la segunda inyección
  • Anotación JvmOverloads para constructor primario de class
  • No puedo permitir que mi aplicación use el permiso dibujar sobre otras aplicaciones
  • Problema con Android Studio y Main Activity.kt esperando la statement del miembro
  • La class de testing de Child Kotlin ejecuta todas las testings de los padres
  • Swift si lo dejas y más en Kotlin
  • Anotación de Kotlin + Dagger2 @Named en el uso del método del proveedor del module