Scala泛型基础

泛型类

class Parent{}
class Child extends Parent{}
class SubChild extends Child{}
class MyList[T]{}

不变:

	var s:MyList[Child] = new MyList[Child]
      //var s1:MyList[Child] = new MyList[Parent]
     //var s2:MyList[Child] = new MyList[SubChild]

注释的s1,s2都是错误的,不变只能是泛型类本身,不能是父类,也不能是子类。

协变:

class MyList[+T]{}

     var s:MyList[Child] = new MyList[Child]
      //var s1:MyList[Child] = new MyList[Parent]
     var s2:MyList[Child] = new MyList[SubChild]

可以是泛型类本身,也可以是子类

逆变:

class MyList[-T]{}

      var s:MyList[Child] = new MyList[Child]
      var s1:MyList[Child] = new MyList[Parent]
     //var s2:MyList[Child] = new MyList[SubChild]

可以是泛型类本身,也可以是父类

泛型通配符:

下界,类本身或父类

def main(args: Array[String]): Unit = {
    test(classOf[Child])
    test(classOf[Parent])
  }
  
  //泛型通配符  下届
  def test[T>:Child](a:Class[T]):Unit={
    println(a)
  }

上界,类本身或子类

def main(args: Array[String]): Unit = {
    test(classOf[Child])
    test(classOf[SubChild])
  }

  //泛型通配符  上届
  def test[T<:Child](a:Class[T]):Unit={
    println(a)
  }

你可能感兴趣的:(Scala,scala,scala)