【问题标题】:How to transition Java class to Kotlin Data Class如何将 Java 类转换为 Kotlin 数据类
【发布时间】:2017-06-09 18:53:45
【问题描述】:

我使用 Android Studio 的 Kotlin 插件将我的 Java 类转换为 Kotlin。问题是它仍然不是 Kotlin 风格。我想改用 Kotlin 数据类。但是,每当我使用主要和次要构造函数创建它时,它都不起作用。在我的情况下,正确的 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
    }

}

【问题讨论】:

    标签: java android kotlin data-class


    【解决方案1】:

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

    【讨论】:

    • 那么就不需要具有不同数量参数的辅助构造函数了吗?
    • 不,你必须传递必需的参数(在这种情况下一个都没有),其余的都是可选的,将被初始化为默认值。如果您只想为两个参数中的一个自定义值,您可以按名称指定它们(如我的回答中所述)
    • 请注意,如果您希望从 Java 代码中访问不同的构造函数,您需要将 @JvmOverloads 注释添加到构造函数。 stackoverflow.com/questions/35748906/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    相关资源
    最近更新 更多