What if you could write one class that magically fits any type you want?
Why Generic class declaration in Kotlin? - Purpose & Use Cases
Imagine you want to create a box that can hold any type of item--apples, books, or toys. Without generics, you'd have to make a new box class for each item type, like AppleBox, BookBox, ToyBox, and so on.
This manual way is slow and boring. Every time you want a new box for a different item, you write almost the same code again. It's easy to make mistakes and hard to keep track of many similar classes.
Generic class declaration lets you create one flexible box that works for any item type. You write the box code once, and it adapts to hold apples, books, or toys without extra work.
class AppleBox(val item: Apple) class BookBox(val item: Book)
class Box<T>(val item: T)It makes your code reusable and clean, so you can handle many types easily with one smart class.
Think of a shopping cart app where you want to store different products. Using a generic class, you can create one cart item class that works for clothes, electronics, or groceries without rewriting code.
Manual classes for each type cause repeated code and mistakes.
Generic classes let one class work with many types.
This saves time and keeps code simple and flexible.
Practice
<T>?Solution
Step 1: Understand generic class declaration
Declaring a generic class with<T>means the class can accept any type as a parameter.Step 2: Identify the benefit
This allows the class to be flexible and reusable for different data types without rewriting the code.Final Answer:
To allow the class to work with any data type without rewriting code -> Option BQuick Check:
Generics = Flexible types [OK]
- Thinking generics restrict types instead of generalizing
- Confusing generics with abstract classes
- Assuming generics create singletons
Box in Kotlin?Solution
Step 1: Recall Kotlin generic syntax
Kotlin uses angle brackets<>to declare generics after the class name.Step 2: Check each option
Onlyclass Box<T> { }is correct, using angle brackets after the class name. The other options use semicolon after <T>, square brackets, or place <T> inside the braces.Final Answer:
class Box<T> { } -> Option CQuick Check:
Generics use <> brackets [OK]
- Using square brackets [] instead of angle brackets
- Adding semicolon after class declaration
- Placing <T> inside curly braces
class Box<T>(val value: T) {
fun getValue(): T = value
}
fun main() {
val intBox = Box(123)
val strBox = Box("Hello")
println(intBox.getValue())
println(strBox.getValue())
}Solution
Step 1: Understand generic class usage
The classBoxholds a value of any type and returns it viagetValue().Step 2: Trace the main function
Two instances are created: one with an integer 123 and one with a string "Hello". CallinggetValue()returns these values.Final Answer:
123 Hello -> Option AQuick Check:
Generic class returns stored value [OK]
- Expecting object reference output instead of value
- Confusing type inference causing errors
- Assuming null is returned
class Container<T> {
var item: T
constructor(item: T) {
this.item = item
}
}Solution
Step 1: Check property initialization
The propertyitemis declared but not initialized and not marked as abstract or lateinit.Step 2: Understand Kotlin property rules
In Kotlin, non-null properties must be initialized or declared abstract/lateinit. Here,itemis neither initialized nor marked, causing a compile error.Final Answer:
Property 'item' must be initialized or be abstract -> Option DQuick Check:
Uninitialized property causes error [OK]
- Forgetting to initialize properties
- Misunderstanding constructor syntax
- Thinking generic declaration is wrong
PairBox that holds two values of possibly different types. Which is the correct declaration for this class in Kotlin?Solution
Step 1: Understand requirement for two different types
The class should accept two generic types, so it needs two type parameters, e.g.,TandU.Step 2: Check each option
class PairBox(val first: T, val second: U) correctly declares two generic types and constructor parameters. class PairBox<T>(val first: T, val second: T) uses one type for both values, not allowing different types. class PairBox { val first: T; val second: T } has wrong property types (second is T, should be U). class PairBox(val first: Any, val second: Any) usesAnywhich is not generic.Final Answer:
class PairBox<T, U>(val first: T, val second: U) -> Option AQuick Check:
Two generics for two types [OK]
- Using one generic type for both values
- Confusing property types in class body
- Using Any instead of generics
Ready to prove it?
Pass the test and this pattern moves unknown
