如何将Java类转换为Kotlin Data Class

Mik*_*keB 0 java android kotlin data-class

我使用Android studio的Kotlin插件将我的Java类转换为Kotlin.事情是它还不是Kotlin风格.我想改用Kotlin Data Class.但每当我使用主要和辅助构造函数创建它时,它将无法工作.在我的情况下,正确的DATA类实现是什么?

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
    }

}
Run Code Online (Sandbox Code Playgroud)

Tub*_*uby 6

Kotlin在构造函数中引入了参数的默认值.您可以使用它们来创建只使用Kotlin的一个构造函数的数据类.它看起来像这样

data class Task(    
    @SerializedName("_id") var id: String? = null,
    @SerializedName("text") var taskTitle: String? = null,
    @SerializedName("completed") var isCompleted: Boolean? = null
)
Run Code Online (Sandbox Code Playgroud)

因此,您可以将数据类与任意数量的参数一起使用,例如:

var task = Task(taskTitle = "title")
var task = Task("id", "title", false)
var task = Task(id = "id", isCompleted = true)
Run Code Online (Sandbox Code Playgroud)

您甚至可以替换参数顺序

var task = Task(taskTitle = "title", isCompleted = false, id = "id")
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果您希望可以从Java代码访问不同的构造函数,则需要将`@ JvmOverloads`批注添加到构造函数中./sf/ask/2502423451/ (3认同)