Mobile Development
Kotlin
Subjective
Oct 04, 2025
What are companion objects and object declarations in Kotlin?
Detailed Explanation
Object declarations create singletons, while companion objects provide class-level functionality.\n\n**Object declaration (Singleton):**\n\nobject DatabaseManager {\n private var connection: Connection? = null\n \n fun connect() {\n connection = DriverManager.getConnection(url)\n }\n \n fun query(sql: String): ResultSet? {\n return connection?.createStatement()?.executeQuery(sql)\n }\n}\n\n// Usage\nDatabaseManager.connect()\nval results = DatabaseManager.query("SELECT * FROM users")\n\n\n**Companion object:**\n\nclass User(val name: String, val email: String) {\n companion object {\n const val MIN_AGE = 18\n private var userCount = 0\n \n fun create(name: String, email: String): User {\n userCount++\n return User(name, email)\n }\n \n fun getUserCount() = userCount\n }\n}\n\n// Usage\nval user = User.create("John", "john@email.com")\nprintln(User.MIN_AGE)\nprintln(User.getUserCount())\n\n\n**Companion object with interface:**\n\ninterface Factory {\n fun create(): T\n}\n\nclass MyClass {\n companion object : Factory {\n override fun create(): MyClass = MyClass()\n }\n}\n\n\n**Object expressions (anonymous objects):**\n\nval clickListener = object : View.OnClickListener {\n override fun onClick(v: View?) {\n println("Clicked!")\n }\n}\n\n// With multiple interfaces\nval handler = object : Runnable, Serializable {\n override fun run() {\n println("Running")\n }\n}\n\n\n**Key differences:**\n• **object**: Creates singleton instance\n• **companion object**: One per class, accessible via class name\n• **object expression**: Anonymous object for interfaces/abstract classes
Discussion (0)
No comments yet. Be the first to share your thoughts!
Share Your Thoughts