泛型泛型定义

Scala的泛型和Java中的泛型表达的含义都是一样的,对处理的数据类型进行约束,但是Scala提供了更加强大的功能

  • scala中的泛型采用中括号

  • scala中的泛型是不可变的

  • 泛型和类型不是一个层面的东西

    所以scala中泛型和类型无法联合使用

泛型语法

如果能将类型和泛型当成一个整体来使用的话,那不就方便了吗?

  • 如果将类型和泛型联合使用,那么类型相同时,如果泛型存在父子类关系,那么联合的类型也就存在父子类关系,这个操作其实就是一种变化,称之为协变, +T

  • 如果类型相同,泛型之间存在父子关系,那么让联合后的类型存在子父关系。这个操作其实也是一种变化,称之为逆变, -T

val message1 : Message[Child] = new Message[Child]()val message2 : Message[Child] = new Message[Parent]()//val message3 : Message[Child] = new Message[SubChild]()  -- 不符合新的父子关系// Child(父) -> child -> SubChild(子)// MessageChild(子)         MessageSubChild(父)// Child(子)             Parent(父)// MessageChild(父)      MessageParent(子)class Message[-T] {}class Parent {}class Child extends Parent {}class SubChild extends Child {}

泛型和类型的区别

  • 所谓的类型,其实就是对外部的数据做约束
  • 所谓的泛型,其实就是对内部的数据做约束

泛型特征