Clase de datos de Kotlin, sala de Android y setter personalizado

Tengo una entidad para Android Room que se parece a eso. Hasta ahora, sin preocupaciones.

@Entity(tableName = "users", indices = arrayOf(Index(value = "nickName", unique = true))) data class User(@ColumnInfo(name = "nickName") var nickName: String, @ColumnInfo(name = "password") var password: String) { @ColumnInfo(name = "id") @PrimaryKey(autoGenerate = true) var id: Long = 0 } 

Ahora necesito encriptar la contraseña. Con Java, esto simplemente se haría con un setter y eso funcionaría.

¿Cómo harías eso con Kotlin? No puedo encontrar una solución para combinar Android Room, setters personalizados y classs de datos.

Puedes probar algo como esto:

 @Entity(tableName = "users", indices = arrayOf(Index(value = "nickName", unique = true))) data class User(@ColumnInfo(name = "nickName") var nickName: String, private var _password: String) { @ColumnInfo(name = "id") @PrimaryKey(autoGenerate = true) var id: Long = 0 @ColumnInfo(name = "password") var password: String = _password set(value) { field = "encrypted" } override fun toString(): String { return "User(id=$id, nickName='$nickName', password='$password')" } } 

Pero no recomendaría encriptar la contraseña dentro de Entity o modificarla de alguna manera ya que no es su responsabilidad y puede enfrentar errores con el doble encryption de su contraseña como cuando recupera su entidad de la database. Room poblará la entidad con datos que conducirán al encryption de datos ya encriptados.

  @Entity(tableName = "users", indices = arrayOf(Index(value = "nickName", unique = true))) data class User(@ColumnInfo(name = "nickName") var nickName: String, @ColumnInfo(name = "password") var password: String) { var _password = password set(value): String{ //encrypt password } @ColumnInfo(name = "id") @PrimaryKey(autoGenerate = true) var id: Long = 0 } 

Esto creará un setter personalizado así que cada vez que configure su contraseña puede encriptarla también dentro del setter.

  • Kotlin i.inc () ¿10 veces más lento que i ++?
  • Android 2 Retrofit llamada sincrónica
  • Kotlin: confusión con los generics
  • ¿Cómo declarar una class que contiene un campo de tipo genérico en Kotlin?
  • Handler () postDelay no está disponible para este código de Kotlin, ¿cómo solucionarlo?
  • Parece ser un error en la biblioteca de layout de soporte
  • ¿Cómo burlarse de los methods estáticos en Kotlin?
  • Problemas con HasSupportFragmentInjector en kotlin - DispatchingAndroidInjector es nulo
  • Proporcionar methods en Dagger 2
  • Kotlin: ¿Cómo sincronizar espera una list de methods idénticos?
  • Crear class CSS con kotlinx.html DSL