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

时间:2017-06-06 20:03:48

标签: kotlin

我在Java中有这个:

String[] string{"A", "B", "C"}

在Kotlin课程中,它是这样的:

int[][] array {{1, 2, 3},{1, 2, 3}}

我需要知道的是,如何在具有4个不同构造函数和setter和getter的数据类中执行此操作

4 个答案:

答案 0 :(得分:4)

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

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

为您定义了getter和setter,无需定义它们。

答案 1 :(得分:0)

在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")

getters / setters可见性修饰符我们可以在这样的构造函数中提供它们,

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

答案 2 :(得分:0)

Android studio提供了一种非常简单的方法来实现将任何Java类转换为Kotlin。只需输入"将java转换为kotlin"在您的文件搜索选项卡中,IDE将为您执行此操作 enter image description here

答案 3 :(得分:0)

我刚从其他人那里添加了不同的答案,因为如果你在User数据类中有太多变量,那么它应该像下面那样太长。

 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