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 animar ConstraintLayout de abajo hacia arriba de la pantalla?
  • OnClick y TextView en Android Studio 3
  • Constructor de class de datos con dos constructores diferentes en Kotlin
  • ¿Cómo crear funciones a nivel de package?
  • Smart-cast y comparación dentro de Expression después de 'is' type-check
  • Devuelve el resultado de la consulta postgresql en una function
  • Kapt, Kotlin, Dagger2 Error durante el process de anotación
  • El uso de Kotlin "apply in companion object" arroja un error inesperado
  • Error de time de ejecución de Kotlin SAM: NoSuchMethodError: no hay método estático
  • La label no denota un bucle en paraCada
  • Kotlin JPA: cómo lidiar con la initialization de @OneToOne