跳到主要内容

1 篇博文 含有标签「copy」

查看所有标签

Kotlin 数据类实战:用 data class 告别 JavaBean 的百行模板代码

· 阅读需 6 分钟
重庆 Kotlin User Group

如果你学过 Java,一定对下面这种代码深恶痛绝——一个简单的用户类,要写 getter、setter、equals()、hashCode()、toString(),加上构造函数,轻轻松松上百行:

// Java:一个"简单"的数据类
public class User {
private final int id;
private final String name;
private final int age;

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

// 下面是 30 行你复制粘贴了无数遍的代码...
public int getId() { return id; }
public String getName() { return name; }
public int getAge() { return age; }

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return id == user.id && age == user.age && Objects.equals(name, user.name);
}

@Override
public int hashCode() {
return Objects.hash(id, name, age);
}

@Override
public String toString() {
return "User(id=" + id + ", name=" + name + ", age=" + age + ")";
}
}

而在 Kotlin 里,同样的功能只需要 一行:

data class User(val id: Int, val name: String, val age: Int)

没错,就这一行。equals()、hashCode()、toString()、copy()、解构方法——编译器全自动生成。