object у Kotlin-у — то је декларативни начин креирања синглтон-објекта са лењом иницијализацијом и подразумеваном безбедношћу нити. Кључна реч object замењује целу класу са једним инстанцом и користи се за декларисање singleton, companion object, анонимних објеката и статичких утилита. Према JetBrains Kotlin Documentation (2026), object declaration је најједноставнији и најбезбеднији начин имплементације singleton-а у JVM свету.
Главно
object у Kotlin-у — то је специјална форма декларације која истовремено дефинише класу и креира њен једини инстанц (синглтон). То је хибрид class declaration и instance creation у једној конструкцији.
У Java-и за креирање singleton-а потребно је написати приватни конструктор, статичко поље, метод getInstance и обрадити безбедност нити. Kotlin object то ради једном линијом кода: object MySingleton { }. Компајлер самостално генерише безбедну лењу иницијализацију, користећи механизам static initializer у бајт-коду JVM-а.
Према Kotlin Language Specification (2026), object declaration се компајлира у финалну класу са приватним конструктором и статичким пољем INSTANCE, иницијализованим у статичком блоку. Ово гарантује атомичност иницијализације на нивоу JVM-а.
Object declaration (синглтон-објекат) се декларише помоћу кључне речи object, након које следи име. Тело објекта може садржати својства, методе, init блокове и наслеђивати друге класе или интерфејсе.
object DatabaseManager {
private val connection: String = "jdbc:postgresql://localhost:5432/app"
fun query(sql: String): List<Map<String, Any>> {
// извршавање упита
return emptyList()
}
}
// Употреба
DatabaseManager.query("SELECT * FROM users")
Иницијализација DatabaseManager-а се дешава у тренутку првог приступа — лењо и безбедно за нити. Никакав додатни код за синхронизацију није потребан.
Object може наслеђивати обичне класе и интерфејсе. Ово омогућава коришћење object-а као имплементације апстрактне класе или интерфејса са једним инстанцом.
interface Logger {
fun log(message: String)
}
object ConsoleLogger : Logger {
override fun log(message: String) {
println("[LOG] $message")
}
}
companion object — то је специјални object декларисан унутар класе са кључном речи companion. Он замењује статичке чланове у Kotlin-у, јер у језику нема кључне речи static.
class ApiClient {
companion object {
private const val BASE_URL = "https://api.example.com"
fun create(): ApiClient {
return ApiClient()
}
}
}
// Позивање без креирања инстанце ApiClient-а
val client = ApiClient.create()
Companion object може имати име (подразумевано Companion), имплементирати интерфејсе и бити проширив кроз extension functions. За разлику од статичких метода у Java-и, companion object је пуноправни објекат који се може проследити као аргумент или сачувати у променљивој.
Према Kotlin Best Practices (2026), companion object се користи за фабричке методе, константе и статичке утилите повезане са класом. Препоручује се избегавање прекомерног коришћења companion object-а — за неповезане утилите боље је користити функције највишег нивоа.
За компатибилност са Java-ом, методи companion object-а могу се анотирати са @JvmStatic. Ово генерише праву статичку методу у бајт-коду JVM-а, доступну из Java кода без синтаксе Companion.
Object expression — то је анонимни објекат креиран на месту за преузимање метода класе или интерфејса без декларисања посебне именоване класе.
val handler = object : Runnable {
override fun run() {
println("Задатак извршен")
}
}
thread(handler)
Object expressions се разликују од декларација object по томе што креирају нови инстанц при сваком извршењу. Они нису синглтони и немају име. Анонимни објекти могу хватати променљиве из затворења, као и ламбде.
За разлику од Java-е, где анонимне класе могу наслеђивати само један тип, Kotlin object expression може наслеђивати више типова истовремено.
interface Clickable {
fun click()
}
abstract class View {
abstract fun render()
}
val button = object : View(), Clickable {
override fun render() = println("Рендеровање дугмета")
override fun click() = println("Дугме кликнуто")
}
Object — једна од најсвестранијих конструкција Kotlin-а, примењена у многим сценаријима.
У Android пројектима object се често користи за декларисање Repository-а, где није потребно више инстанци. Јединствени инстанц гарантује конзистентност података.
object UserRepository {
fun getUser(id: Int): User? {
// добијање корисника
return null
}
}
Companion object са фабричким методама — алтернатива вишеструким конструкторима. Именоване фабричке методе чине код самодокументујућим.
data class GsonParser {
companion object {
fun create(): GsonParser = GsonParser()
fun createPretty(): GsonParser = GsonParser()
}
}
Object може служити као контејнер за константе, замењујући статичка final поља у Java-и. Притом object подржава наслеђивање, што омогућава креирање хијерархија конфигурација.
Према Kotlin Standard Library (2026), object declaration је најучинковитији начин креирања singleton-а у Kotlin-у, превазилазећи по брзини имплементације „double-checked locking“ и упоредив са enum singleton-ом у Java-и.
Често постављана питања
Object истовремено декларише класу и креира њен једини инстанц. Обична класа може имати више инстанци креираних кроз конструктор.
Лењо — при првом приступу објекту. До тада меморија није алоцирана, а код у init блоку се не извршава.
Не, object не може имати експлицитни конструктор. Иницијализација се врши у init блоку, који се позива једном при првом приступу објекту.
companion object — то је object декларисан унутар класе. Његови чланови су доступни кроз име класе без креирања инстанца, што замењује статичке чланове Java-е.
Да, иницијализација object-а је потпуно безбедна за нити захваљујући статичком иницијализатору JVM-а. Никаква додатна синхронизација није потребна.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође