Scala的泛型

Posted shengyang17

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala的泛型相关的知识,希望对你有一定的参考价值。

 

类比java中的泛型:

 

上界(协变)、下界(逆变)

scala中泛型采用中括号声明

  val array = Array[Int](1,2,3,4)
    array(3)
//声明什么类型就返回什么类型
    //test[String]()

  def test[T](t: T)= { //声明什么类型就返回什么类型

  }

泛型上界

test[User2](new User3)
  def test[T <: User2](t: T) ={  //上界 从树的结构上比它小的,也就是它的子类型

  }

泛型下界

  test[User1](new User2)
  def test[T >: User2](t: T) ={  //下界 从树的结构上比它大的,也就是它的父类型
    println(t)
  }

 

class User1{

}
class User2 extends User1 {

}
class User3 extends User2 {

}

 

 

 

协变(+)(也就是上限上界):这个类型往它的子类中去找,多态的感觉;从类的关系往回推叫逆变(-)(也就是下限下界);它们主要在类声明时使用;

  java中:
        List<Object> lis = new ArrayList<Object>(); //new ArrayList<Object> 这里只能写Object,不能写其他类型
        lis.add(new Dept()); //但可添加其他类型的对象

 

    /*val user: User4[User2] = new User4[User3] //协变,+User2为上限,比它小的子类都可以,父类就不行了*/
    val user: User4[User2] = new User4[User1] //逆变,+User2为下限,比它大的父类都可以,子类就不行了
    //

  new User4[User3]
}
class User1{

}
class User2 extends User1 {

}
class User3 extends User2 {

}
/*class User4[+User2]{

}*/
class User4[-User2]{  //class User4[User2]{} 如果是+ -都不加,就是只能是这个类型

}

 

以上是关于Scala的泛型的主要内容,如果未能解决你的问题,请参考以下文章

17.scala的泛型类

关于 Java 和 Scala 中的泛型

在 Scala 中使用带有 PureConfig 的泛型类型

如何接受在 Scala 中扩展类的泛型

通过给定的泛型类型 Scala 获取类的伴随对象

Scala编译器抱怨方法级别的泛型参数的类型不匹配