如何将这个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