Прототип

Прототип

В data классах котлина есть готовый механизм позволяющий реализовать создание копии объекта. Но подобного поведения можно добиться и в обычном классе. Достаточно передать в качестве параметров по умолчанию поля самого объекта (а что, так можно было?). Код приведен ниже

class Person( var name: String, var score: Int, var email: String, ) { fun copy( name: String = this.name, score: Int = this.score, email: String = this.email ) = Person(name, score, email) } @RestController class MyController { @GetMapping fun createClone(@ModelAttribute person: Person) = listOf( person.copy(), person.copy(name = "Another name"), person.copy(score = 1000) ) }

Результат:

[ { "name": "Name", "score": 0, "email": "email@address.com" }, { "name": "Another name", "score": 0, "email": "email@address.com" }, { "name": "Name", "score": 1000, "email": "email@address.com" } ]
3
5 комментариев

А где лапки? Ампутировали?

почему не питон?

Потому что котлин лучше чем питон

То есть ты написала идентичную функцию в классе для создания класса, но в чем универсальность ?

Можно сделать копию, заменив часть полей одним вызовом