Kotlin中这些课程有什么区别?

Dos*_*nov 2 class kotlin

我是Kotlin的初学者!我们能否解释一下Kotlin中这些类之间的区别

class Person(val name: String, val age: Int)

class Person(name: String, age: Int)

class Person(var name: String,var age: Int)
Run Code Online (Sandbox Code Playgroud)

我如何在Kotlin中为数据类添加getter和setter?

Sim*_*ant 6

首先,您应该尝试阅读手册中的不同之处:

https://kotlinlang.org/docs/reference/data-classes.html

https://kotlinlang.org/docs/reference/classes.html

但我们试着解释一下:

class Person(val name: String, val age: Int)
Run Code Online (Sandbox Code Playgroud)

Kotlin编译器将为两个构造函数参数生成存储值的相应字段,并生成相关的getter.由于关键字,值是不可变的,val因此不会有任何setter.

class Person(name: String, age: Int)
Run Code Online (Sandbox Code Playgroud)

参数仅传递给构造函数,但不存储为字段.所以也没有吸气剂和制定者.

class Person(var name: String, var age: Int)
Run Code Online (Sandbox Code Playgroud)

与第一个示例中一样,值存储在生成的字段中.但是由于关键字,值是可变的,var因此编译器将生成getter和setter.

data是放在class声明前面的附加(可选)关键字.除了getter和setter之外,这将生成一个toString方法,用它们的名称打印所有属性的值,并hashCode考虑每个值的方法.为data类生成getter和setter时,您不需要手动添加它们.

Kotlin很多关于减少由Kotlin编译器完成的Java开发人员所需的手动工作.