Сначала вы должны попытаться прочитать разницу в руководстве:
https://kotlinlang.org/docs/reference/data-classes.html
https://kotlinlang.org/docs/reference/classes.html
Но давайте попробуем объяснить это:
class Person(val name: String, val age: Int)
Компилятор Kotlin сгенерирует для обоих аргументов конструктора соответствующие поля, хранящие значения, и сгенерирует соответствующие получатели.Значения являются неизменяемыми из-за ключевого слова val
, поэтому не будет никаких установщиков.
class Person(name: String, age: Int)
Аргументы передаются только конструктору, но не сохраняются как поля.Таким образом, также не будет методов получения и установки.
class Person(var name: String, var age: Int)
Как и в первом примере, значения хранятся в сгенерированных полях.Но значения изменчивы из-за ключевого слова var
, поэтому компилятор будет генерировать геттеры и сеттеры.
data
- это дополнительное (необязательное) ключевое слово, которое ставится перед объявлением class
.Это в дополнение к методам получения и установки генерирует метод toString
, печатающий значения всех атрибутов с их именами, и метод hashCode
, учитывающий каждое значение.Так как геттеры и сеттеры генерируются для data
классов, вам не нужно добавлять их вручную.
Kotlin - это много о сокращении ручной работы, которую должен выполнять разработчик в Java, выполняемый компиляторомКотлин.