uh oh first commit
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
package models
|
||||
|
||||
import java.time.LocalDate
|
||||
import java.util.UUID
|
||||
|
||||
/**
|
||||
* Основная сущность коллекции — Райан Гослинг.
|
||||
*
|
||||
* @property id уникальный идентификатор, генерируется автоматически
|
||||
* @property name имя героя (Райан Гослинг), не может быть null или пустой строкой
|
||||
* @property coordinates координаты героя, не может быть null
|
||||
* @property creationDate дата создания записи, генерируется автоматически
|
||||
* @property realHero является ли настоящим героем (конечно)
|
||||
* @property hasToothpick есть ли зубочистка (естественно)
|
||||
* @property impactSpeed скорость удара, не может быть null
|
||||
* @property soundtrackName название саундтрека, не может быть null (Nightcall - Kavinsky)
|
||||
* @property minutesOfWaiting количество минут ожидания
|
||||
* @property weaponType тип оружия, может быть null
|
||||
* @property car автомобиль героя, не может быть null
|
||||
*/
|
||||
data class HumanBeing(
|
||||
val id: UUID = UUID.randomUUID(),
|
||||
val name: String,
|
||||
val coordinates: Coordinates,
|
||||
val creationDate: LocalDate = LocalDate.now(),
|
||||
val realHero: Boolean,
|
||||
val hasToothpick: Boolean,
|
||||
val impactSpeed: Double,
|
||||
val soundtrackName: String,
|
||||
val minutesOfWaiting: Float,
|
||||
val weaponType: WeaponType?,
|
||||
val car: Car
|
||||
) : Comparable<HumanBeing> {
|
||||
|
||||
init {
|
||||
require(name.isNotBlank()) { "Имя не может быть пустым" }
|
||||
}
|
||||
|
||||
/**
|
||||
* Сравниваем по имени и id
|
||||
*/
|
||||
override fun compareTo(other: HumanBeing): Int {
|
||||
val byName = this.name.compareTo(other.name)
|
||||
if (byName != 0) return byName
|
||||
return this.id.toString().compareTo(other.id.toString())
|
||||
}
|
||||
|
||||
/**
|
||||
* Два объекта считаются одинаковыми, если совпадают их [id].
|
||||
*/
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (this === other) return true
|
||||
if (other !is HumanBeing) return false
|
||||
return id == other.id
|
||||
}
|
||||
|
||||
override fun hashCode(): Int = id.hashCode()
|
||||
|
||||
// убил на этот вывод часа 5-6. Зря я сюда полез
|
||||
/**
|
||||
* Красивое строковое представление для команды [show].
|
||||
*/
|
||||
override fun toString(): String =
|
||||
"""
|
||||
|HumanBeing (It Drives) {
|
||||
| id = $id
|
||||
| name = $name (a.k.a. Ryan Gosling)
|
||||
| coordinates = (x=${coordinates.x}, y=${coordinates.y})
|
||||
| creationDate = $creationDate
|
||||
| realHero = $realHero
|
||||
| hasToothpick = $hasToothpick
|
||||
| impactSpeed = $impactSpeed
|
||||
| soundtrackName = $soundtrackName
|
||||
| minutesOfWait = $minutesOfWaiting
|
||||
| weaponType = ${weaponType ?: "null"}
|
||||
| car.cool = ${car.cool}
|
||||
|}
|
||||
""".trimMargin()
|
||||
}
|
||||
Reference in New Issue
Block a user