Ключевое слово 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