Публикация

Object в Kotlin. object не класс!

Если вы работали с Java и после решили перейти на Kotlin, то у вас скорее всего возникнет вопрос, почему object это не родительский класс всех классов как это есть в Java. Давайте разберемся чуть подробней, что такое object в Kotlin.

Теория

Первое с чего стоит начать знакомство, так это с ключевого слова object:

object MyObject {
  //...
}

Если сравнивать объекты в Kotlin с классами, то главное между ними отличие это то, что классы описывают структуру будущих экземпляров этого класса, в то время как object изначально является экземпляром. Менее того, object существует исключительно в единственном экземпляре!

Следуя выше сказанному, мы поняли, что object никакого отношения к Object классу Java не имеет. И если уж и проводить аналогию, то конечно же в Kotlin есть главный родительский класс, который наследуют все классы и называется он Any класс.

Где и как применять?

Возможно вы уже догадались, какой шаблон реализует object в Kotlin. Верно, именно Singleton представлен в основе объектов Kotlin.

object ToDoList {
  private val list: MutableList<String> = mutableListOf()

  fun add(item: String) {
    list.add(item)
  }

  fun show() {
    list.map { println(it) }
  }
}

К примеру, код выше демонстрирует простой ToDo список, который мы можем использовать так:

fun main() {
  ToDoList.add("Купить молока")
  ToDoList.add("Покормить кота")
  ToDoList.show()
}

object также может наследовать другие классы или реализовывать интерфейсы.

Константы

Если вы пишите на Kotlin не первый день, и вам приходилось использовать константы, то вы уже использовали object в паре с ключевым словом companion.

Нам часто приходится при написании бизнес-логики отделать константные значения в отдельные константы, для удобства их переиспользовать.

Допустим у нас есть класс EmployeeDAO, который идет в базу данных и на основе имен таблиц получает их значения, так вот таким образом внутри класса EmployeeDAO мы можем отделить эти константы и в дальнейшем переиспользовать их в любом месте этого класса либо другого если они не помечены как private:

class EmployeeDAO {
  companion object {
    val EMPLOYEE_NAME = 'empl_name'
    val EMPLOYEE_ADDRESS = 'empl_adrs'
  }

  // business logic bellow
}
Опубликовано: 4 октября 2021 г.Просмотров: 67

Комментарии

Мы не даем слово анониму 😶
Войдите, пожалуйста.

Еще никто не комментировал эту публикацию 🤔