Bird
Raised Fist0
Kotlinprogramming~20 mins

Why object declarations create singletons in Kotlin - Challenge Your Understanding

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Kotlin Singleton Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of accessing object properties
What is the output of this Kotlin code using an object declaration?
Kotlin
object Config {
    val version = 1
    val name = "App"
}

fun main() {
    println(Config.version)
    println(Config.name)
}
ACompilation error
B
version
name
C
Config.version
Config.name
D
1
App
Attempts:
2 left
💡 Hint
Object declarations create a single instance accessible by the name.
🧠 Conceptual
intermediate
2:00remaining
Why does Kotlin object declaration create a singleton?
Why does an object declaration in Kotlin create a singleton instance?
ABecause it defines a class with a private constructor and a single instance is created automatically
BBecause it is a function that returns a new object each call
CBecause it is a variable holding a mutable object
DBecause it defines a class and creates a new instance every time
Attempts:
2 left
💡 Hint
Think about how Kotlin restricts instance creation for object declarations.
❓ Predict Output
advanced
2:00remaining
Comparing object instances
What is the output of this Kotlin code comparing two references to the same object declaration?
Kotlin
object Logger {
    fun log(msg: String) = println("Log: $msg")
}

fun main() {
    val a = Logger
    val b = Logger
    println(a === b)
}
ACompilation error
Bfalse
Ctrue
DRuntime exception
Attempts:
2 left
💡 Hint
The '===' operator checks if two references point to the same object.
🔧 Debug
advanced
2:00remaining
Why does this code fail to compile?
Why does this Kotlin code fail to compile?
Kotlin
object Counter {
    var count = 0
}

fun main() {
    val c = Counter()
    println(c.count)
}
AThe 'count' property is private and inaccessible
BObject declarations cannot be instantiated with parentheses
CThe object declaration must have a constructor
DThe variable 'c' is declared with val instead of var
Attempts:
2 left
💡 Hint
Remember how object declarations are accessed in Kotlin.
🚀 Application
expert
3:00remaining
Using object declaration for thread-safe singleton
Which Kotlin object declaration ensures thread-safe lazy initialization of a singleton?
Kotlin
object Database {
    init {
        println("Initializing database connection")
    }
    fun query(sql: String) = "Result for: $sql"
}

fun main() {
    println(Database.query("SELECT * FROM users"))
    println(Database.query("SELECT * FROM orders"))
}
AThe object declaration is initialized lazily and thread-safely on first access
BThe object declaration creates a new instance on each access
CThe object declaration requires manual synchronization for thread safety
DThe object declaration is initialized eagerly at program start
Attempts:
2 left
💡 Hint
Kotlin object declarations are thread-safe by default and initialized on first use.

Practice

(1/5)
1. Why does an object declaration in Kotlin create a singleton?
easy
A. Because it cannot hold any properties or functions
B. Because it allows multiple instances to be created
C. Because it is the same as a class with a constructor
D. Because it creates only one instance automatically and shares it everywhere

Solution

  1. Step 1: Understand object declaration behavior

    An object declaration creates a single instance automatically without needing to call a constructor.
  2. Step 2: Recognize singleton sharing

    This single instance is shared everywhere in the program, ensuring only one copy exists.
  3. Final Answer:

    Because it creates only one instance automatically and shares it everywhere -> Option D
  4. Quick Check:

    Singleton = single shared instance [OK]
Hint: Object declarations create one shared instance automatically [OK]
Common Mistakes:
  • Thinking object creates multiple instances
  • Confusing object with regular class
  • Assuming object cannot have properties
2. Which of the following is the correct syntax to declare a singleton object in Kotlin?
easy
A. object MySingleton { fun greet() = "Hello" }
B. class MySingleton() { fun greet() = "Hello" }
C. singleton MySingleton { fun greet() = "Hello" }
D. object MySingleton() { fun greet() = "Hello" }

Solution

  1. Step 1: Identify correct object declaration syntax

    In Kotlin, object declarations do not use parentheses; they are declared as object Name { ... }.
  2. Step 2: Check options for syntax errors

    object MySingleton { fun greet() = "Hello" } uses correct syntax without parentheses. object MySingleton() { fun greet() = "Hello" } incorrectly uses parentheses. Options B and C use invalid keywords or class syntax.
  3. Final Answer:

    object MySingleton { fun greet() = "Hello" } -> Option A
  4. Quick Check:

    Object declaration syntax = object Name { } [OK]
Hint: Object declarations never have parentheses after the name [OK]
Common Mistakes:
  • Adding parentheses after object name
  • Using class keyword instead of object
  • Using non-existent singleton keyword
3. What will be the output of this Kotlin code?
object Counter {
    var count = 0
    fun increment() { count++ }
}

fun main() {
    Counter.increment()
    Counter.increment()
    println(Counter.count)
}
medium
A. 0
B. 1
C. 2
D. Compilation error

Solution

  1. Step 1: Understand the singleton object usage

    The Counter object holds a single count variable shared everywhere. Calling increment() increases count by 1 each time.
  2. Step 2: Trace the increments and print

    Two calls to increment() increase count from 0 to 2. Printing Counter.count outputs 2.
  3. Final Answer:

    2 -> Option C
  4. Quick Check:

    2 increments = count 2 [OK]
Hint: Object properties keep state shared across calls [OK]
Common Mistakes:
  • Assuming count resets each call
  • Thinking increment returns a value
  • Confusing object with class instance
4. This Kotlin code tries to create two instances of an object. What is the error?
object Logger {
    fun log(msg: String) = println(msg)
}

fun main() {
    val log1 = Logger()
    val log2 = Logger()
    log1.log("Test")
}
medium
A. log1 and log2 are null
B. Cannot create instances of an object; it has no constructor
C. Logger object is missing a constructor
D. No error; code runs fine

Solution

  1. Step 1: Understand object instantiation rules

    In Kotlin, object declarations cannot be instantiated with parentheses because they have no constructor and are singletons.
  2. Step 2: Identify the error in code

    Trying to call Logger() causes a compilation error because object cannot be instantiated.
  3. Final Answer:

    Cannot create instances of an object; it has no constructor -> Option B
  4. Quick Check:

    Object cannot be instantiated = error [OK]
Hint: Objects have no constructors; don't use parentheses [OK]
Common Mistakes:
  • Trying to instantiate object with ()
  • Assuming object needs constructor
  • Ignoring compilation errors
5. You want to count how many times a function is called across your entire Kotlin program. Which approach using an object declaration is best?
hard
A. Declare an object with a mutable counter property and increment it inside the function
B. Declare a class with a counter property and create a new instance each call
C. Use a local variable inside the function to count calls
D. Declare an object with a constant counter property initialized to zero

Solution

  1. Step 1: Identify need for shared mutable state

    Counting calls across the program requires a shared variable that updates each time the function runs.
  2. Step 2: Choose object with mutable property

    An object with a mutable counter property can be accessed and incremented from anywhere, preserving state.
  3. Step 3: Evaluate other options

    Creating new class instances each call resets count. Local variables reset each call. Constant properties cannot change.
  4. Final Answer:

    Declare an object with a mutable counter property and increment it inside the function -> Option A
  5. Quick Check:

    Singleton object with mutable state counts calls [OK]
Hint: Use object with var property to share and update count [OK]
Common Mistakes:
  • Using class instances that reset count
  • Using val instead of var for counter
  • Counting inside local function variable
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard