Vehicle
- это супертип.Вы не знаете, что какой-то подтип A
из Vehicle
будет включать Car
, поэтому вы не можете написать его таким образом.Что если кто-то попросит Bus
?CarDealer
не может помочь, но подпись типа обещает, что она может заставить его работать на любой A <: Vehicle
, который вы просите.
Если вы не заботитесь о сохраненииреальный тип транспортного средства, просто напишите
object CarDealer {
def getVehicularClass: Class[Vehicle] = classOf[Car]
}
В качестве альтернативы, если вы хотите, чтобы какой-то интерфейс подчинялся, вы указываете в интерфейсе, что вы хотите:
trait VehicleClass[A <: Vehicle] {
def getVehicularClass: Class[A]
}
и тогда у вассостояние объекта, какой подкласс транспортного средства он обещает вернуть:
object CarDealer extends VehicleClass[Car] {
def getVehicularClass = classOf[Car]
}
, и теперь все обещания определены и соответствуют.