Type checks and casts
While writing your code, you may often be inclined to check what type your object is using, is
, and cast it using as
. As an example, let's imagine we're building a system for superheroes. Each superhero has their own set of methods:
interface Superhero class Batman : Superhero { fun callRobin() { println("To the Bat-pole, Robin!") } } class Superman : Superhero { fun fly() { println("Up, up and away!") } }
There's also a function where a superhero tries to invoke their superpower:
fun doCoolStuff(s: Superhero) { if (s is Superman) { (s as Superman).fly() } else if (s is Batman) { ...