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 😉

  • Al usar setcontentview en un BottomsheetDialog se produce un error como "ninguna de las siguientes funciones se puede invocar con los arguments suministrados"
  • Spring @Autowire no trabaja en Kotlin
  • No se puede llamar a StartActivityForResult en Anko
  • RuntimeException si minifyEnabled es verdadero con la class ViewModel
  • Completable.andThen resultados en "other is null"
  • La interfaz de Java SAM creada a partir de Kotlin da ClassCastException
  • Constructor secundario de Kotlin de supervalor de twig condicional de class extendida
  • Conectando a DB por hibernate en el proyecto de kotlin
  • Cómo mostrar una notificación en la aplicación que no se queda en el cajón de notifications de Snapchat
  • Cómo get el valor del ObservableField en android
  • MVVM se une en Android