We've seen an example where we were allowed to create AircraftSeat
for passengers. The example looked like the following:
class AircraftSeat[-T]
From what we know so far, Aircraft
is contravariant in its type parameter T
. But the thing is, when it comes to creating instances of AircraftSeat
, it can be created for any type of T
. What's expected is that this type parameter can only be of the Passengers
type or it's subtype. So to achieve that we can introduce a type bound, in our case we'll use an upper-type bound. The reason for this is because we want to specify the type that's on the top of the inheritance hierarchy, in our case it's Passengers
.
It'll look as follows:
class AircraftSeat[-T <: Passengers]
Here, the notation <:
specifies its upper bound. What does this do? Let's check out an example to understand it better:
object Bounds extends App { /* * AircraftSeats can be consumed only by Passengers. */ class AircraftSeat[-T <: Passengers] def...