我已经了解了Scala中的下限和上限。
我知道如何单独处理它们但如果我们把它们放在一起会发生什么,比如说A >: B <: C
我的问题是基于这个问题:
trait Thing
class Vehicle extends Thing
class Car extends Vehicle
class Jeep extends Car
class Coupe extends Car
class Motorcycle extends Vehicle
class Bicycle extends Vehicle
class Tricycle extends Bicycle
并假设我们宣布
class Parking[A >: Bicycle <: Vehicle](val plaza: A)
所以从A>: Bicycle
我们可以推断A可以有类型Bicycle,Vehicle和Thing
从A<: Vehicle
我们可以推断出A可以有除Thing之外的任何类型
所以从上面的陈述我们可以通过使用数学交叉属性来推断A只能有自行车,车辆和东西的类型吗? 根据Liskov的原则
,我觉得这很有效new Parking(new Tricycle)
但为什么以下也有效?
new Parking(new Coupe)
我是新手,所以请引导我而不是标记更多重复并关闭它。
答案 0 :(得分:2)
不,这不会引发错误。
new Tricycle
可以是[{1}},Tricycle
,Bicycle
,Vehicle
,Thing
,AnyRef
类型。
Any
无法编译,但new Parking[Tricycle](new Tricycle)
,new Parking[Vehicle](new Tricycle)
可以。
在new Parking[Bicycle](new Tricycle)
new Parking(new Tricycle)
中推断为A
,因此不会引发错误。
Bicycle
可以是[{1}},new Coupe
,Coupe
,Car
,Vehicle
,Thing
类型。其中AnyRef
解决了不平等问题Any
。