Bird
Raised Fist0
Kotlinprogramming~20 mins

Custom getters and setters in Kotlin - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Kotlin Custom Getters and Setters Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this Kotlin code with a custom getter?

Look at this Kotlin class with a custom getter. What will be printed when println(box.area) runs?

Kotlin
class Box(val width: Int, val height: Int) {
    val area: Int
        get() = width * height
}

fun main() {
    val box = Box(3, 4)
    println(box.area)
}
A12
B7
C0
DCompilation error
Attempts:
2 left
💡 Hint

Remember the getter calculates the area by multiplying width and height.

❓ Predict Output
intermediate
2:00remaining
What happens when setting a property with a custom setter?

Consider this Kotlin class with a custom setter. What will be printed after person.age = 25 and println(person.age)?

Kotlin
class Person {
    var age: Int = 0
        set(value) {
            field = if (value >= 0) value else 0
        }
}

fun main() {
    val person = Person()
    person.age = 25
    println(person.age)
}
A-25
B0
CCompilation error
D25
Attempts:
2 left
💡 Hint

The setter sets the field only if the value is non-negative.

🔧 Debug
advanced
2:30remaining
Why does this Kotlin code cause a stack overflow error?

Examine this Kotlin class. Why does setting counter.value = 5 cause a stack overflow?

Kotlin
class Counter {
    var value: Int = 0
        set(value) {
            field = value
        }
}

fun main() {
    val counter = Counter()
    counter.value = 5
    println(counter.value)
}
AThe code has a syntax error due to missing 'field' keyword.
BThe property 'value' is immutable and cannot be set.
CThe setter recursively calls itself because it assigns to 'value' instead of 'field'.
DThe getter is missing, causing infinite recursion.
Attempts:
2 left
💡 Hint

Check what happens when the setter assigns to 'value' instead of 'field'.

🧠 Conceptual
advanced
1:30remaining
What is the purpose of backing fields in Kotlin custom setters/getters?

Why do Kotlin custom setters and getters use the field keyword inside their bodies?

ATo call the superclass implementation of the property.
BTo refer to the actual storage of the property and avoid recursive calls.
CTo declare a new local variable inside the setter or getter.
DTo make the property immutable.
Attempts:
2 left
💡 Hint

Think about what happens if you assign to the property name inside its setter.

❓ Predict Output
expert
2:30remaining
What is the output of this Kotlin code with a custom setter modifying input?

Analyze this Kotlin code. What will be printed after account.balance = -100 and println(account.balance)?

Kotlin
class BankAccount {
    var balance: Int = 0
        set(value) {
            field = if (value < 0) 0 else value
        }
}

fun main() {
    val account = BankAccount()
    account.balance = -100
    println(account.balance)
}
A0
B100
CCompilation error
D-100
Attempts:
2 left
💡 Hint

The setter changes negative values to zero.

Practice

(1/5)
1. What is the main purpose of custom getters and setters in Kotlin?
easy
A. To create new classes automatically
B. To define functions outside a class
C. To control how properties are read and written
D. To import external libraries

Solution

  1. Step 1: Understand property access

    Custom getters and setters allow you to define how a property value is retrieved or changed.
  2. Step 2: Identify their purpose

    They help control and protect the data by customizing read/write behavior.
  3. Final Answer:

    To control how properties are read and written -> Option C
  4. Quick Check:

    Custom getters/setters = control property access [OK]
Hint: Remember: getters/setters control property reading/writing [OK]
Common Mistakes:
  • Confusing getters/setters with class creation
  • Thinking they define functions outside classes
  • Assuming they import libraries
2. Which of the following is the correct syntax to define a custom setter for a Kotlin property age?
easy
A. var age: Int set(value) { field = value }
B. var age: Int get(value) { field = value }
C. val age: Int set(value) { field = value }
D. var age: Int set { value = field }

Solution

  1. Step 1: Check property mutability

    Setter can only be defined for var, not val.
  2. Step 2: Verify setter syntax

    The setter uses set(value) { field = value } to assign the new value.
  3. Final Answer:

    var age: Int set(value) { field = value } -> Option A
  4. Quick Check:

    Setter syntax = set(value) { field = value } [OK]
Hint: Setter needs var and set(value) syntax [OK]
Common Mistakes:
  • Using get instead of set for setter
  • Defining setter on val property
  • Reversing field and value in setter
3. What will be the output of this Kotlin code?
class Person {
    var name: String = ""
        get() = field.uppercase()
        set(value) { field = value.trim() }
}

fun main() {
    val p = Person()
    p.name = "  alice  "
    println(p.name)
}
medium
A. ALICE
B. alice
C. ecila
D. Alice

Solution

  1. Step 1: Analyze setter behavior

    Setter trims the input, so " alice " becomes "alice" stored in field.
  2. Step 2: Analyze getter behavior

    Getter returns the stored value in uppercase, so "alice" becomes "ALICE".
  3. Final Answer:

    ALICE -> Option A
  4. Quick Check:

    Setter trims, getter uppercases = ALICE [OK]
Hint: Setter trims, getter uppercases output [OK]
Common Mistakes:
  • Ignoring trimming in setter
  • Not converting to uppercase in getter
  • Assuming original input prints
4. Identify the error in this Kotlin class with custom getter and setter:
class Box {
    var size: Int = 0
        get() = field
        set(value) {
            if (value > 0) field = value
            else field = 0
        }

    fun printSize() {
        println(size)
    }
}
medium
A. Setter does not assign value correctly
B. No error, code works fine
C. Getter should not use field
D. Property size should be val, not var

Solution

  1. Step 1: Check setter logic

    Setter assigns field = value if positive, else 0. This is valid.
  2. Step 2: Check getter and property type

    Getter returns field, which is correct. Property is var, so setter allowed.
  3. Final Answer:

    No error, code works fine -> Option B
  4. Quick Check:

    Setter and getter correct = no error [OK]
Hint: Setter with condition is valid; getter uses field correctly [OK]
Common Mistakes:
  • Thinking getter can't use field
  • Assuming setter must always assign value
  • Confusing var and val for setters
5. You want a Kotlin property score that never stores a negative value. Which custom setter implementation ensures this correctly?
hard
A. var score: Int = 0 set(value) { field = value * -1 }
B. var score: Int = 0 set(value) { if (value < 0) field = 0 }
C. var score: Int = 0 set(value) { field = value }
D. var score: Int = 0 set(value) { field = if (value < 0) 0 else value }

Solution

  1. Step 1: Understand requirement

    Property must never store negative values; negative inputs become zero.
  2. Step 2: Evaluate each setter

    var score: Int = 0 set(value) { field = if (value < 0) 0 else value } sets field to 0 if value is negative, else stores value correctly.
  3. Step 3: Check other options

    A stores negative of value, which can be positive or negative incorrectly; B only sets field if negative, ignoring positive values; C stores negatives unchanged.
  4. Final Answer:

    var score: Int = 0 set(value) { field = if (value < 0) 0 else value } -> Option D
  5. Quick Check:

    Setter with if-else ensures no negatives [OK]
Hint: Use if-else in setter to block negatives [OK]
Common Mistakes:
  • Not assigning field for positive values
  • Allowing negative values to be stored
  • Incorrectly negating values
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