Scala带多类型约束的参数化类型含义及语法疑问
Scala两种泛型类约束写法解析
一、T <: classTypeA with trait1 的含义
这种写法是复合类型约束,with trait1用来给泛型参数T加额外要求:
T首先得是classTypeA的子类(包括classTypeA本身)- 同时
T必须混入了trait1这个特质
举个实际例子:如果classTypeA是Animal,trait1是CanFly,那T只能是像class Bird extends Animal with CanFly这类既继承Animal又混入CanFly的类,单纯继承Animal的Dog就不符合这个约束。
二、T <: classTypeA : classTypeB 的含义
这里是上界约束 + 上下文边界的组合:
T <: classTypeA还是你已知的上界约束,要求T是classTypeA的子类- 后面的
: classTypeB是上下文边界,它要求当前作用域中存在一个classTypeB[T]类型的隐式值。编译器会自动查找这个隐式实例,你可以在类内部直接隐式调用它的方法。
比如常见的class ScoreContainer[T <: Number : Ordering](score: T),意思是T必须是Number的子类,同时要有一个Ordering[T]的隐式实例,这样在类里就能用Ordering的方法对T类型的分数进行排序操作。
内容的提问来源于stack exchange,提问作者xlgforever
相关产品推荐
相关产品推荐

