WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

Scala · Advanced · question 51 of 100

How can you use implicit classes to extend the functionality of existing types in Scala?

📕 Buy this interview preparation book: 100 Scala questions & answers — PDF + EPUB for $5

Implicit classes in Scala are a powerful way to extend the functionality of existing types by adding new methods to them without modifying their source code. This concept is often called "extension methods" in other languages.

To use implicit classes to extend the functionality of existing types, follow these steps:

1. Define an implicit class with the new methods you want to add.

2. Import the implicit class into the scope where it needs to be applied to the existing type.

3. Call the new methods on instances of the existing type as if they were native to the type.

Let’s see a detailed example. Suppose we want to add a method called ‘squared()‘ to the ‘Int‘ type, which will return the square of the integer.

Step 1: Define the implicit class:

object Implicits {
  implicit class RichInt(val x: Int) {
    def squared(): Int = {
      x * x
    }
  }
}

Here, we create an ‘object‘ called ‘Implicits‘ that contains the implicit class ‘RichInt‘. This class takes an integer value ‘x‘ and has a new method called ‘squared()‘ which returns the square of ‘x‘.

Step 2: Import the implicit class in the desired scope:

import Implicits._

To use the ‘RichInt‘ implicit class, we need to import it to the current scope. This import statement makes the ‘RichInt‘ class available for implicit conversions.

Step 3: Call the new method on instances of ‘Int‘:

Now you can use the ‘squared()‘ method on any ‘Int‘ type as if it were a native method:

val num = 5
val square = num.squared()   // square will be 25
println(s"The square of $num is $square")

The Scala compiler automatically converts the ‘Int‘ to ‘RichInt‘ when it encounters the ‘squared()‘ method, allowing you to use the new functionality on existing types.

Keep in mind that there are some restrictions when declaring implicit classes:

- Implicit class must be defined inside another object, class, or trait.

- Its constructor must have exactly one parameter.

- It should not be a member of a top-level object.

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Scala interview — then scores it.
📞 Practice Scala — free 15 min
📕 Buy this interview preparation book: 100 Scala questions & answers — PDF + EPUB for $5

All 100 Scala questions · All topics