Home Articles

为什么kotlin在数据类中有componentN函数,如果他们已经有getter和setter?

Asked
Viewed 160 times
5

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似乎更加不言自明?

1 Answer

  • 16

    Kotlin通过 componentN 函数支持以下语法:

    val (name, age) = person
    

    此语法称为destructuring declaration . 解构声明一次创建多个变量 . 我们已经声明了两个新变量:名称和年龄 .

    解构声明编译为以下代码:

    val name = person.component1()
    val age = person.component2()
    

    component1()和component2()函数是Kotlin中广泛使用的约定原则的另一个例子(参见运算符like和*,for-loops等) . 只要可以在其上调用所需数量的组件函数,任何东西都可以在解构声明的右侧 . 当然,可以有component3()和component4()等等 . 请注意,componentN()函数需要使用operator关键字标记,以允许在解构声明中使用它们 .

Related