Запись на курсы по HTML, CSS, JavaScript, PHP, Python, фреймворкам и CMS,
а также: помощь в поиске работы и заказов, стажировка на реальных проектах→
1255 of 1310 menu
Бесплатный курс по выкладке сайтов на хостинг. Разбираем все нюансы! Начало 14 октября. Жми для записи!

Ключевое слово static

В языке Kotlin отсутствует ключевое слово static, которое присутствует в таких языках как Java и C#. Вместо него для реализации статических членов класса используются компаньон-объекты (companion object) и объекты-одиночки (object declaration). Компаньон-объекты позволяют определять статические методы и свойства, которые принадлежат классу, а не его экземплярам.

Синтаксис компаньон-объекта

class MyClass { companion object { // статические свойства и методы val staticProperty: String = "value" fun staticMethod(): String { return "Hello from static method" } } }

Пример

Создадим класс с компаньон-объектом, содержащим статическое свойство и метод:

class Calculator { companion object { val PI: Double = 3.14159 fun add(a: Int, b: Int): Int { return a + b } } }

Пример

Обращение к статическим членам класса без создания экземпляра:

val piValue = Calculator.PI val sum = Calculator.add(5, 3) println("PI: $piValue") println("Sum: $sum")

Результат выполнения кода:

PI: 3.14159 Sum: 8

Синтаксис объекта-одиночки

object Singleton { val property: String = "value" fun method(): String { return "Hello from singleton" } }

Пример

Использование объекта-одиночки для создания глобально доступного экземпляра:

object AppConfig { val version: String = "1.0.0" val maxConnections: Int = 10 fun getDatabaseUrl(): String { return "jdbc:mysql://localhost:3306/mydb" } }
println("App version: ${AppConfig.version}") println("Database URL: ${AppConfig.getDatabaseUrl()}")

Результат выполнения кода:

App version: 1.0.0 Database URL: jdbc:mysql://localhost:3306/mydb

Пример

Компаньон-объекты могут иметь имя и реализовывать интерфейсы:

interface Factory { fun create(): String } class Product { companion object NamedCompanion : Factory { override fun create(): String { return "Product created" } fun getInfo(): String { return "Product information" } } }
val product = Product.create() val info = Product.NamedCompanion.getInfo() println(product) println(info)

Результат выполнения кода:

Product created Product information

Пример

Инициализация компаньон-объекта с помощью блока init:

class Logger { companion object { val logLevel: String init { logLevel = "DEBUG" println("Companion object initialized") } fun log(message: String) { println("[$logLevel] $message") } } }
Logger.log("Application started")

Результат выполнения кода:

Companion object initialized [DEBUG] Application started

Смотрите также

  • ключевое слово final,
    которое используется запрета наследования и переопределения
  • ключевое слово open,
    которое разрешает наследование и переопределение
  • ключевое слово override,
    которое используется для переопределения методов и свойств