Scala教程(十五)Scala的特性逆变与协变

 


 

Scala教程(十五)Scala的特性逆变与协变

 

 



1 逆变与协变


1.1 概念

   covariant协变:使你能够使用比原始指定的类型的子类,如:C[+T]:如果AB的子类,那么C[A]C[B]的子类。

contravariance逆变:使你能够使用比原始指定的类型的父类,如:C[-T]:如果AB的子类,那么C[B]C[A]的子类。

Invariance不变。你只能使用原始指定的类型,不能协变和逆变,如:C[T]:无论AB是什么关系,C[A]C[B]没有从属关系。

    class Person
    class Student extends Person
    class C[+T](val args: T)
    // 子类型继承协变类型,具体子类
    class S[+T](args: T) extends C[T](args) 

图解:

含义

Scala中的标记

covariant协变

C[A]C[B]的子类    [+T]

contravariant(逆变)

C[B]C[A]的子类    [-T]

invariant(不变)

C[A]C[B]不相关    [T]

 

1.2 协变返回值

    // P类型:协变返回值要求是T的父类
    class P[+T](val first: T, val second: T) {
      // 返回值要求泛型限定R>:T,R以T为下界,R是T的父类
      def replaceFirst[R >: T](newFirst: R) = new P[R](newFirst, second);
    }


 

    --以上为Scala的特性逆变与协变,谢谢大家对我的关注。

                                                                                                                                                                                      ——厚积薄发(yuanxw)


你可能感兴趣的:(Scala教程(十五)Scala的特性逆变与协变)