Kotlin学习(三):Data Class

我们经常会需要创建一个这样的类:仅用于承载数据,而无其他作用。这样的类中一些标准函数通常可以从数据中机械性的生成。在kotlin中,这种类叫做data class,被标记为 data。(e.g:java中的bean类与其set,get,toString等方法)。

Example
In Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public class Developer {

private String name;
private int age;

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

public String getName() {
return name;
}

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

public int getAge() {
return age;
}

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

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;

Developer developer = (Developer) o;

if (age != developer.age) return false;
return name != null ? name.equals(developer.name) : developer.name == null;

}

@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
return result;
}

@Override
public String toString() {
return "Developer{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
In Kotlin
1
data class Developer(val name: String, val age: Int)

当一个类被标记为 data class时,你不需要像Java中那样,去实现或者创建以下这些方法。

  • hashCode()
  • equals()
  • toString()
  • copy()

编译器会自动地创建这些内部关联,所以kotlin同样引领了一个使代码整洁的潮流。

尽管如此,data class 需要满足的需求很少:

  • 主构造函数需要至少一个参数。
  • 所有的主构造函数参数需要被标记为val 或者 var。
  • Data Class不能是 abstract, open, sealed or inner这些类别.

所以,当你遇到这些场景,使用data class吧

龙颜大悦,朕要赏赐!