Bird
Raised Fist0
Kotlinprogramming~5 mins

Star projection for unknown types in Kotlin - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a star projection in Kotlin generics?
A star projection is a way to say "I don't know the exact type" for a generic parameter. It uses the * symbol to represent an unknown type safely.
Click to reveal answer
beginner
How do you write a star projection for a generic type List in Kotlin?
You write it as List<*> which means a list of some unknown type.
Click to reveal answer
intermediate
Why use star projection instead of a raw type in Kotlin?
Star projection keeps type safety by acknowledging unknown types, while raw types can cause unsafe operations and errors.
Click to reveal answer
intermediate
What is the difference between List<*> and List in Kotlin?
List<*> means a list of some unknown type, while List means a list that can hold any type including null. The first is safer for reading unknown types.
Click to reveal answer
beginner
Can you add elements to a List<*> in Kotlin?
No, you cannot add elements to a List<*> because the exact type is unknown, so adding could break type safety.
Click to reveal answer
What does List<*> mean in Kotlin?
AA list with an unknown element type
BA list of Any type elements
CA list that can only hold null
DA list with no elements
Can you add an element to a List<*> in Kotlin?
ANo, because the element type is unknown
BYes, any element can be added
COnly null can be added
DOnly elements of type Any can be added
Which symbol is used for star projection in Kotlin generics?
A&
B?
C#
D*
Why is star projection safer than using raw types?
ABecause it allows adding any type
BBecause it converts all types to Any
CBecause it preserves type safety by acknowledging unknown types
DBecause it disables generics
What is the difference between List<*> and List?
AList<*> can hold any type; List<Any?> is unknown
BList<*> is unknown type; List<Any?> can hold any type including null
CBoth are exactly the same
DList<*> can only hold null; List<Any?> cannot
Explain what star projection means in Kotlin generics and why it is useful.
Think about how Kotlin handles unknown generic types safely.
You got /4 concepts.
    Describe the difference between List<*> and List in Kotlin and when you might use each.
    Consider what each means for the types of elements allowed.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does the star projection * represent in Kotlin generics?
      easy
      A. A type that can only be used with primitive data types
      B. A specific generic type that must be defined explicitly
      C. A wildcard that allows writing but restricts reading
      D. An unknown generic type that allows safe reading but restricts writing

      Solution

      1. Step 1: Understand star projection meaning

        The star projection * means an unknown generic type in Kotlin.
      2. Step 2: Analyze its usage

        It allows safe reading from generic collections but restricts writing to avoid type errors.
      3. Final Answer:

        An unknown generic type that allows safe reading but restricts writing -> Option D
      4. Quick Check:

        Star projection = unknown generic type with safe read [OK]
      Hint: Star projection means unknown type, safe read only [OK]
      Common Mistakes:
      • Thinking star projection allows writing to generics
      • Confusing star projection with specific generic types
      • Assuming star projection only works with primitives
      2. Which of the following is the correct syntax to declare a list with star projection in Kotlin?
      easy
      A. val list: List<Any> = listOf(1, 2, 3)
      B. val list: List<*> = listOf(1, 2, 3)
      C. val list: List<> = listOf(1, 2, 3)
      D. val list: List = listOf(1, 2, 3)

      Solution

      1. Step 1: Recall star projection syntax

        Star projection uses * inside angle brackets to represent unknown type.
      2. Step 2: Check each option

        val list: List<*> = listOf(1, 2, 3) uses List<*> which is correct syntax for star projection.
      3. Final Answer:

        val list: List<*> = listOf(1, 2, 3) -> Option B
      4. Quick Check:

        Star projection syntax = List<*> [OK]
      Hint: Star projection syntax always uses * inside angle brackets [OK]
      Common Mistakes:
      • Leaving angle brackets empty like List<>
      • Using List<Any> which is not star projection
      • Confusing star projection with out-projection
      3. What will be the output of the following Kotlin code?
      fun printFirst(list: List<*>) {
          println(list[0])
      }
      
      fun main() {
          val numbers: List<Int> = listOf(10, 20, 30)
          printFirst(numbers)
      }
      medium
      A. 10
      B. Compilation error
      C. null
      D. Runtime exception

      Solution

      1. Step 1: Understand star projection usage in function

        The function accepts List<*>, meaning unknown generic type, safe to read elements.
      2. Step 2: Analyze the call with List<Int>

        Passing List<Int> is valid; reading list[0] returns 10 safely.
      3. Final Answer:

        10 -> Option A
      4. Quick Check:

        Reading from List<*> returns element safely [OK]
      Hint: Reading from List<*> works, writing does not [OK]
      Common Mistakes:
      • Assuming star projection causes compile error
      • Expecting null instead of actual element
      • Thinking runtime exception occurs on read
      4. Identify the error in the following Kotlin code using star projection:
      fun addElement(list: MutableList<*>, element: Any) {
          list.add(element)
      }
      medium
      A. Element type Any is incompatible with list
      B. Syntax error in function declaration
      C. Cannot add element to MutableList<*> due to unknown type
      D. No error, code compiles and runs fine

      Solution

      1. Step 1: Understand star projection with MutableList

        MutableList<*> means unknown generic type; writing is restricted to avoid type errors.
      2. Step 2: Analyze the add operation

        Trying to add element causes compile error because type is unknown and unsafe to write.
      3. Final Answer:

        Cannot add element to MutableList<*> due to unknown type -> Option C
      4. Quick Check:

        Writing to MutableList<*> causes error [OK]
      Hint: Cannot write to star-projected mutable collections [OK]
      Common Mistakes:
      • Thinking add works with MutableList<*>
      • Confusing syntax error with type error
      • Assuming Any type is always accepted
      5. Given a function that accepts a list with star projection, how can you safely copy elements from List<*> to a MutableList<Any> in Kotlin?
      hard
      A. Use a loop to cast each element to Any and add to MutableList<Any>
      B. Directly assign List<*> to MutableList<Any>
      C. Use star projection on both lists
      D. Use MutableList<*> instead of MutableList<Any>

      Solution

      1. Step 1: Understand star projection restrictions

        List<*> allows safe reading but elements are of unknown type, so direct assignment to MutableList<Any> is unsafe.
      2. Step 2: Safely copy elements

        Use a loop to read each element and cast to Any before adding to MutableList<Any>, ensuring type safety.
      3. Final Answer:

        Use a loop to cast each element to Any and add to MutableList<Any> -> Option A
      4. Quick Check:

        Copy with loop and cast = safe transfer [OK]
      Hint: Copy elements with loop and cast from List<*> to MutableList<Any> [OK]
      Common Mistakes:
      • Trying direct assignment between incompatible generic types
      • Using star projection on mutable list incorrectly
      • Ignoring type casting when copying elements
      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