kotlin中有一个数据类,例如
@Entity
data class Record(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long? = null,
@Column(nullable = false, name = "name")
var name: String? = null
)
我可以调用component1和component2函数来访问属性。但是,当我声明属性var时,我有getter和setter,如果我声明属性val,我有getter。在这种情况下,componentN函数是多余的,为什么我们需要它们,因为getter似乎更加不言自明?
答案 0 :(得分:16)
Kotlin通过componentN
函数支持以下语法:
val (name, age) = person
此语法称为destructuring declaration。解构声明一次创建多个变量。我们已经声明了两个新变量:name和age。
解构声明编译为以下代码:
val name = person.component1()
val age = person.component2()
component1()和component2()函数是另一个例子 Kotlin中广泛使用的惯例原则(见+等运营商) 和*,for-loops等)。任何东西都可以在a的右边 解构声明,只要所需的组件数量 可以在其上调用函数。当然,也可以 component3()和component4()等等。
请注意,componentN()函数需要标记为 operator关键字,允许在解构声明中使用它们。