我在Java中有这个:
String[] string{"A", "B", "C"}
在Kotlin课程中,它是这样的:
int[][] array {{1, 2, 3},{1, 2, 3}}
我需要知道的是,如何在具有4个不同构造函数和setter和getter的数据类中执行此操作
答案 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)
答案 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