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

Ede*_*lla 1 kotlin

我在 Java 中有这个:

public class User {

    String name;
    String id;
    int age;

    public User(String name) {
        this.name = name;
    }

    public User(String name, String id) {
        this.name = name;
        this.id = id;
    }

    public User(String id, int age) {
        this.id = id;
        this.age = age;
    }

    public User() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", id='" + id + '\'' +
                ", age=" + age +
                '}';
    }
} 
Run Code Online (Sandbox Code Playgroud)

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

class User {

    var name: String?=null
    var id: String?=null
    var age: Int = 0

    constructor(name: String) {
        this.name = name
    }

    constructor(name: String, id: String) {
        this.name = name
        this.id = id
    }

    constructor(id: String, age: Int) {
        this.id = id
        this.age = age
    }

    constructor() {}

    override fun toString(): String {
        return "User{" +
                "name='" + name + '\'' +
                ", id='" + id + '\'' +
                ", age=" + age +
                '}'
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Tod*_*odd 6

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

data class User(var name: String? = null, var age: Int = 0, var id: String? = null)
Run Code Online (Sandbox Code Playgroud)

然后以多种方式构建它。

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...
Run Code Online (Sandbox Code Playgroud)

getter 和 setter 是为您定义的,也不需要定义它们。