zoukankan      html  css  js  c++  java
  • 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]{} 如果是+ -都不加,就是只能是这个类型
    
    }
  • 相关阅读:
    博弈基础小结
    P4677 山区建小学|区间dp
    两道DP,四年修一次路
    每天一套题打卡|河南省第七届ACM/ICPC
    nyoj 1278G: Prototypes analyze 与 二叉排序树(BST)模板
    表达式求值
    每天一套题打卡|河南省第八届ACM/ICPC
    每天一套题打卡|河南省第九届ACM/ICPC
    每天一套题打卡|河南省第十届ACM/ICPC
    [UNIX]UNIX常用命令总结
  • 原文地址:https://www.cnblogs.com/shengyang17/p/10662681.html
Copyright © 2011-2022 走看看