¿Cómo volver a escribir esta class de Java en una class de datos de Kotlin?

Tengo esto en Java:

public class User { String name; String id; int age; public User(String name) { this.name = name; } public User(String name, String id) { this.name = name; this.id = id; } public User(String id, int age) { this.id = id; this.age = age; } public User() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", id='" + id + '\'' + ", age=" + age + '}'; } } 

En una class de Kotlin es algo como esto:

 class User { var name: String?=null var id: String?=null var age: Int = 0 constructor(name: String) { this.name = name } constructor(name: String, id: String) { this.name = name this.id = id } constructor(id: String, age: Int) { this.id = id this.age = age } constructor() {} override fun toString(): String { return "User{" + "name='" + name + '\'' + ", id='" + id + '\'' + ", age=" + age + '}' } } 

Lo que necesito saber es cómo hacer eso en una class de datos con los 4 diferentes constructores y los setters y getters

Puede usar una combinación de arguments pnetworkingeterminados y nombrados, por lo que no hay necesidad de múltiples constructores. Defina su class de datos de esta manera:

 data class User(var name: String? = null, var age: Int = 0, var id: String? = null) 

Y luego buildlo de muchas maneras.

 User(name = "Foo") // returns User("Foo", 0, null) User(name = "Foo", age = 21) // returns User("Foo", 21, null) User(id = "x") // returns User(null, 0, "x") User("Foo", 21, "x") // returns User("Foo", 21, "x") User(id = "x", name = "Foo", age = 21) // returns User("Foo", 21, "x") etc... 

Los getters y setters están definidos para usted, no es necesario definirlos tampoco.

En Kotlin podemos tener eso en un solo constructor como este

 data class User(var name: String, var age: Int = 0, var id: String = "ABC") 

Si queremos exponer getters y no setters, solo proporcionamos val en lugar de var como a continuación,

 data class User(val name: String, val age: Int = 0, val id: String = "ABC") 

getters / setters visibilidad modificadores podemos proporcionarlos en el constructor de esta manera,

 data class User(internal val name, internal val age: Int = 0, internal var id: String = "ABC") 

En este caso anterior, getter será accesible solo a ese module.

Podemos crear un object como este,

  var user = User("XYZ") var user1 = User("XYZ", 29) var user2 = User("XYZ", 29, "AXCVFC") 

Android Studio proporciona un método extremadamente simple para lograr convertir cualquier class de Java a Kotlin. Simplemente escriba "convert java to kotlin" en su pestaña de búsqueda de files y el IDE lo hará por usted enter image description here

simplemente agregué una respuesta diferente a la de los demás, porque si tiene demasiadas variables dentro de la class de datos del usuario, entonces debería ser demasiado larga como la de abajo.

  data class UserTooLongClass(var id: String, var name : String, var age : String, var location : String, var mobileNo : String, var mailId : String) 

para que pueda crear como a continuación,

  data class User(var id: String = "1") { var name: String = "" var age: Int = 0 var location : String = "" var mobileNo : String = "" var mailId : String = "" override fun toString(): String { return " id : $id, name : $name, age : $age, location : $location, mobileNo : $mobileNo, mailId : $mailId" } } 

Implementación:

 val user : User = User() user.name = "TestName" user.id = "1223" user.age = 23 user.mobileNo = "333" user.mailId = "ddd@gmail.com" user.location = "xxxxx" Log.d("TAG"," user : "+user.toString()) 

Salida:

 TAG: user : id : 1223, name : TestName, age : 23, location : xxxxx, mobileNo : 333, mailId : ddd@gmail.com 
  • ¿Los methods Kotlin object / singleton están sincronizados?
  • input duplicada: META-INF / myLibrary.kotlin_module
  • Cómo configurar Mockito para Kotlin y Android
  • propiedad de delegado kotlin, en un método get () cómo puedo acceder al valor?
  • Kotlin con map en Android
  • Envolver todos los methods internos con el mismo try-catch en Kotlin
  • Repetir una textura en una región de textura
  • La debugging de Android Kotlin Task no se encuentra en el proyecto raíz
  • La suscripción de rx kotlin no funciona, no recibe artículos
  • Extienda la interfaz paramétrica de Java de Kotlin
  • Kotlin no está comprando desde src / main / kotlin mientras usa maven