Created
October 25, 2020 17:59
-
-
Save rupeshtr78/a20b3cd9a7a2292b6ccfd85140548fb2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
trait Thing | |
trait Vehicle extends Thing | |
class Car extends Vehicle | |
class Jeep extends Car | |
class Coupe extends Car | |
class Motorcycle extends Vehicle | |
class Vegetable | |
class Parking[A](val place: A) | |
val parkingVehicle:Parking[Vehicle] = new Parking(new Jeep) | |
val parkingCar:Parking[Car] = new Parking(new Jeep) | |
val parkingJeep:Parking[Jeep] = new Parking(new Jeep) | |
val parkingMotorCycle:Parking[Vehicle] = new Parking(new Motorcycle) | |
val parkingVegtable = new Parking(new Vegetable) | |
// we can create type parameter restrictions | |
// To create them, we make use of Scala type bounds. | |
class ParkingTypeBound[A <: Vehicle](val place:A) | |
val parkJeep:ParkingTypeBound[Vehicle] = new ParkingTypeBound(new Jeep) | |
class ParkingLowerJeep[A >: Jeep ](val place:A) | |
class Wrangler extends Jeep | |
val parkWrangler = new ParkingLowerJeep(new Wrangler) | |
// Vegatable can be Parked as its anyref anf super type of jeep | |
val parkVeg = new ParkingLowerJeep(new Vegetable) | |
class ParkingUpperLower[A >:Jeep <:Vehicle](val place:A) | |
val parkWrangVehicle = new ParkingUpperLower(new Wrangler) | |
// val parkVegUPLOw = new ParkingUpperLower(new Vegetable) //Wotn Work as its not subtype of Vehicle |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment