如何将这个Java类重写为Kotlin数据类?

我在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 + '}'; } } 

在一个Kotlin类中,像这样的东西:

 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 + '}' } } 

我需要知道的是,如何在一个数据类中使用4种不同的构造函数以及setters和getters来做到这一点

您可以使用默认参数和命名参数的组合,因此不需要多个构造函数。 像这样定义你的数据类:

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

然后以任何方式构建它。

 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... 

获取者和设置者是为你定义的,不需要定义它们。

在Kotlin中,我们可以像这样在一个构造函数中使用

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

如果我们想暴露getter而不是setter,我们只是提供val而不是像下面那样的var

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

getter / setter可见性修饰符,我们可以像这样在构造函数中提供它们,

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

在这种情况下,getter只能被该模块访问。

我们可以像这样创建对象,

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

Android工作室提供了一个非常简单的方法来实现将任何Java类转换为Kotlin。 只需在文件搜索选项卡中输入“convert java to kotlin”,IDE就会为你做 在这里输入图像说明

只是我添加了不同的答案,因为如果你在用户数据类中有太多的variables,那么它应该像下面那样太长。

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

所以你可以创建像下面,

  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" } } 

执行:

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

输出:

 TAG: user : id : 1223, name : TestName, age : 23, location : xxxxx, mobileNo : 333, mailId : ddd@gmail.com