1、泛型类

2、泛型函数

3、上边界Bounds

4、下边界Bounds

5、View Bounds

6、Context Bounds

7、Manifest Context Bounds

8、协变和逆变

1、泛型类

  泛型类,是在类的声明中,定义一些泛型类型,然后在类内部,比如field或者method,就可以使用这些泛型类型。

  使用泛型类,通常是需要对类中的某些成员,进行统一的类型限制,这样可以保证程序更好的健壮性和稳定性。

  如果不使用泛型进行限制,在后期程序运行过程中,可能传入不希望的类型,导致程序出问题。

  

2、泛型函数

  与泛型类类似,可以给某个函数在声明时指定泛型类型,然后在函数体内,多个变量或者返回值之间,就可以使用泛型类型进行声明,从而对某个特殊的变量或多个变量,进行强制性的类型限制。

  

3、上边界Bounds

  在指定泛型类型的时候,有时我们需要指定泛型类型的范围。比如,我们可能要求某个泛型类型,必须是某个类的子类,在程序中就可以放心的调用泛型类型继承父类的方法,程序才能正常使用和运行。(注意:后面的空格)

  

4、下边界Bounds

  除了指定上边界,还可以指定下边界,即指定泛型类型必须是某个类的父类。

  

5、View Bounds

  上下边界Bounds,虽然可以让一种泛型类型,支持有父子关系的多种类型。但是,在某个类与上下边界Bounds指定的父子类型范围内的类都没有任何关系,则默认是肯定不能接受的。

  View Bounds作为一种上下边界Bounds的加强版,支持可以对类型进行隐式转换,对指定的类型进行隐式转换后,再判断是否在边界指定的类型范围内。

  

6、Context Bounds

  Context Bounds是一种特殊的Bounds,它根据泛型类型的声明,比如"T:类型"要求必须存在一个类型为”类型[T]"的隐式值。Context Bounds之所以叫Context,因为它基于一种全局的上下文,需要使用到上下文中的隐式值以及注入。

  

7、Manifest Context Bounds

  scala中,要实例化一个泛型数组,就必须使用Manifest Context Bounds。就是说,如果数组元素类型为T的话,需要为类或者函数定义[T:Manifest]泛型类型,这样才能实例化Array[T]这种泛型数组。

  

8、协变和逆变

  Java中,如果a是b的子类,card[a]不可以是card[b]的子类,但是scala中,灵活的使用协变和逆变,轻松解决了这种问题。

  

  

最新文章

  1. fullpage.js全屏滚动插件使用小结
  2. asp.net web api 测试帮助页面建立并测试
  3. 阿里巴巴笔试整理系列 Session2 高级篇
  4. MVC中使用QrCodeNet 生成二维码
  5. C. Robot(BFS)
  6. Java设计模式--------建造者模式(Builder模式)
  7. c++ 简单的词法分析
  8. extjs desktop startmenu (開始菜单)
  9. CH4INRULZ从渗透到提权
  10. CDN(Content Delivery Network)技术原理概要
  11. Linux 第七天
  12. linux命令之 df file fsck fuser
  13. layer.js关闭子窗口及刷新父窗口
  14. roof
  15. Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程(附源码)
  16. PHP之ctype扩展
  17. 另辟蹊径:vue单页面,多路由,前进刷新,后退不刷新
  18. cmd里面怎么复制粘贴
  19. UVa 11992 Fast Matrix Operations (线段树,区间修改)
  20. influxDB 基本操作

热门文章

  1. spring-boot-starter-actuator(健康监控)配置和使用
  2. PWA 基础学习
  3. 运行系统命令而且将输出写到指定日志文件的shell脚本(2)
  4. 从一个input点击引起的思考
  5. ganglia收集hbase的metrics
  6. 转 java中5种创建对象的方法
  7. 纯CSS实现移动端常见布局——高度和宽度挂钩的秘密
  8. hdu 4549 M斐波那契数列(矩阵高速幂,高速幂降幂)
  9. “2014年ArcGIS影像高级培训班——5月份北京站”火热报名中!
  10. cojs1101. [Vijos1369] 难解的问题==codevs 2188 最长上升子序列