Kotlin
Beginner
1 min read
Object Declarations and Companion Objects
Example
// Singleton via object declaration
object AppConfig {
var debug = false
val version = "2.0"
fun log(msg: String) { if (debug) println("[DEBUG] $msg") }
}
// Class with companion object (static-like factory)
class Database private constructor(val url: String) {
companion object {
private var instance: Database? = null
fun getInstance(url: String): Database {
return instance ?: Database(url).also { instance = it }
}
// Companion can implement an interface
fun create(url: String) = Database(url)
}
fun query(sql: String) = println("Querying [$url]: $sql")
}
// Object expression — anonymous singleton implementing an interface
interface ClickListener {
fun onClick(id: Int)
}
fun setListener(listener: ClickListener) = listener.onClick(42)
fun main() {
AppConfig.debug = true
AppConfig.log("App started v${AppConfig.version}")
val db = Database.getInstance("jdbc:sqlite:app.db")
db.query("SELECT * FROM users")
// Second call returns same instance
val db2 = Database.getInstance("jdbc:sqlite:app.db")
println("Same instance: ${db === db2}")
setListener(object : ClickListener {
override fun onClick(id: Int) = println("Clicked: $id")
})
}
Related Resources
Kotlin Reference
Complete tag & property list
Kotlin How-To Guides
Step-by-step practical guides
Kotlin Exercises
Practice what you've learned
More in Kotlin