如何将Java类转换为Kotlin数据类
问题描述:
我使用Android工作室的Kotlin插件将我的Java类转换为Kotlin。事情不是Kotlin风格。我想要改用Kotlin Data Class。但是每当我使用主要和次要构造函数创建它时,它都不起作用。在我的情况下,正确的DATA类实现是什么?如何将Java类转换为Kotlin数据类
class Task {
@SerializedName("_id")
var id: String? = null
@SerializedName("text")
var taskTitle: String? = null
@SerializedName("completed")
var isCompleted: Boolean? = null
constructor(taskTitle: String) {
this.taskTitle = taskTitle
}
constructor(taskTitle: String, completed: Boolean?) {
this.taskTitle = taskTitle
this.isCompleted = completed
}
constructor(id: String, taskTitle: String, isCompleted: Boolean?) {
this.id = id
this.taskTitle = taskTitle
this.isCompleted = isCompleted
}
}
答
Kotlin在构造函数中引入参数的默认值。你可以使用它们来创建只有一个使用Kotlin的构造函数的数据类。 它看起来像这样
data class Task(
@SerializedName("_id") var id: String? = null,
@SerializedName("text") var taskTitle: String? = null,
@SerializedName("completed") var isCompleted: Boolean? = null
)
所以,你可以利用例如任意数量的参数使用你的数据类:
var task = Task(taskTitle = "title")
var task = Task("id", "title", false)
var task = Task(id = "id", isCompleted = true)
你甚至可以替换参数顺序
var task = Task(taskTitle = "title", isCompleted = false, id = "id")
所以,再有就是不需要具有不同参数数目的二级构造函数? – MikeB
不,您必须传递必需的参数(在这种情况下,它们都不是),其余部分是可选的,并且将被初始化为默认值。如果你想为只有两个参数的自定义值,你可以按名称指定它们(如我的回答中所述) – Tuby
请注意,如果你想从Java代码访问不同的构造函数,你需要添加'@ JvmOverloads'注释到构造函数。 https://stackoverflow.com/questions/35748906/jvmoverloads-annotation-for-class-primary-constructor –