[笔记迁移][Spark开发语言][Scala][10]面向对象——类型参数

版权声明:Collected by Bro_Rabbit only for study https://blog.csdn.net/weixin_38240095/article/details/84134770
  1. Scala类型参数与Java的泛型参数的概念一致

  2. 泛型类
    (1) 定义:在类名的后面跟上类型参数列表,用[]包裹
    (2) 案例
    ClassArgsForclass

    (3) Scala可以根据第一字段类型自动推断泛型类型

  3. 泛型参数
    (1) 定义:在方法名后跟上类型参数列表,用[]包裹
    (2) 案例
    ClassArgsFormethod

    (3) 泛型函数一样可以自动推断类型

  4. 上边界Bounds
    (1) 类似Java的<T extends xxx>,即泛型类型必须是xxx及其子类
    (2) 定义形式:[T <: xxx]
    (3) 案例
    HighBounds

  5. 下边界Bounds
    (1) 类似Java的<T super xxx>,即泛型类型必须是xxx及其超类
    (2) 定义形式: [T >: xxx]

  6. View bounds
    (1) 上下界Bounds的加强版,支持对类型进行隐式转换。将特定的类型进行隐式转换后,再判断是否在边界指定类型范围内
    (2) 定义形式:隐式转换函数+[T <% xxx]
    (3) 案例
    ViewBounds

  7. Context Bounds
    (1) 特殊Bounds,需要使用上下文中的隐式值以及注入
    (2) 定义形式:[T:类型],且必须存在一个“类型[T]”的隐式值
    (3)案例
    ContextBounds

  8. Manifest Context Bounds
    (1) Scala中,如果要实例化一个泛型数组,就必须使用Manifest Context Bounds

    (2) 定义形式:若数组元素类型为T的话,则需要为类或函数定义[T:Manifest]泛型类型,才能实例化Array[T]这种泛型数组

    (3) 案例
    ManifestContextBounds

  9. 泛型的协变和逆变
    (1) 引例:在Java中,如果有Professional是Master的子类,Card<Professional>却不是Card<Master>的子类

    (2) 定义形式
    <1> 协变:A[+T],表示A[T]的继承结构与T的继承结构顺序一致,向下多态
    <2> 逆变:A[-T],表示A[T]的继承结构与T的继承结构相反,向上推出,父子状态交换

    (3) 案例
    Vary

  10. Existential Type
    (1) Spark中最为常见
    (2) 相当于Java的泛型通配符 “?”

猜你喜欢

转载自blog.csdn.net/weixin_38240095/article/details/84134770