Класс Object
— это корневой класс в иерархии Java, от которого неявно наследуются все остальные классы. В Kotlin его аналогом является Any
, но при компиляции в JVM Any
преобразуется в Object
.
toString()
override fun toString(): String {
return "ClassName(property=$value)"
}
equals()
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
// Сравнение полей
}
x.equals(x)
= truex.equals(y)
= y.equals(x)
x.equals(y)
и y.equals(z)
, то x.equals(z)
hashCode()
override fun hashCode(): Int {
return Objects.hash(field1, field2)
}
equals()
возвращает true, hashCode()
должен возвращать одинаковые значенияgetClass() (в Kotlin - javaClass
)
Class<?>
, содержащий метаинформациюwait()/notify()/notifyAll()
ReentrantLock
или корутины в KotlinAny vs Object:
Any
имеет только toString()
, equals()
, hashCode()
Автоматическая генерация:
data class User(val id: Int, val name: String)
// Автоматически генерирует equals, hashCode, toString
Оператор ==:
==
вызывает equals()
(в отличие от Java)===
requireNonNull()
fun process(value: String) {
val nonNullValue = requireNotNull(value)
}
hash() (аналог Objects.hashCode())
override fun hashCode() = hash(field1, field2)
class Book(val title: String, val year: Int) {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (other !is Book) return false
return title == other.title && year == other.year
}
override fun hashCode(): Int {
var result = title.hashCode()
result = 31 * result + year
return result
}
}
Правила для Parcelable:
Эффективность в RecyclerView:
понимание методов класса Object критически важно для корректной реализации равенства объектов, работы коллекций и многопоточности. В Kotlin многие методы имеют более идиоматичные аналоги, но принципы остаются теми же. Всегда соблюдайте контракты при переопределении этих методов.