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中,灵活的使用协变和逆变,轻松解决了这种问题。

  

  

14、Scala类型参数的更多相关文章

  1. Scala类型参数中协变(+)、逆变(-)、类型上界(<:)和类型下界(>:)的使用

    转自:http://fineqtbull.iteye.com/blog/477994#bc2364938 有位je上的同学来短信向我问起了Scala类型参数中协变.逆变.类型上界和类型下界的使用方法和 ...

  2. 11、scala类型参数

    一.类型参数1 1.介绍 类型参数是什么?类型参数其实就类似于Java中的泛型.先说说Java中的泛型是什么,比如我们有List a = new ArrayList(),接着a.add(1),没问题, ...

  3. 14. Scala使用递归的方式去思考,去编程

    14.1 基本介绍 -Scala饰运行在Java虚拟机(Java Virtual Machine)之上,因此具有如下特点 1) 轻松实现和丰富的Java类库互联互通 2) 它既支持面向对象的编程方式, ...

  4. Scala 类型参数

    介绍 类型参数是什么?类型参数其实就类似于Java中的泛型.先说说Java中的泛型是什么,比如我们有List a = new ArrayList(),接着a.add(1),没问题,a.add(&quo ...

  5. Scala实战高手****第15课:Scala类型参数编程实战及Spark源码鉴赏

    1.Scala的类和方法.函数都可以是泛型 2.上界:表示泛型的类型必须是某种类型或者其类型的子类,语法:<: ,对类型进行限定 3.下界:表示泛型的类型必须是某种类型或者其类型的父类,语法:& ...

  6. Scala类型参数(泛型)与隐式转换

    package com.yz9 import org.junit.Test import scala.collection.mutable.ListBuffer class test { @Test ...

  7. scala学习笔记-类型参数中协变(+)、逆变(-)、类型上界(<:)和类型下界(>:)的使用

    转载自  fineqtbull   http://fineqtbull.iteye.com/blog/477994 有位je上的同学来短信向我问起了Scala类型参数中协变.逆变.类型上界和类型下界的 ...

  8. scala目录

    1. 使用Scala(构建这样一个应用,它会取回一份列表,其中包括用户持有的股票的代码以及股份,并告知他们在当前日期为止的这些投资的总价.这包含了几件事:获取用户输入.读文件.解析数据.写文件.从We ...

  9. scala下划线

    作为函数的参数 一个匿名的函数传递给一个方法或者函数的时候,scala会尽量推断出参数类型.例如一个完整的匿名函数作为参数可以写为 scala> def compute(f: (Double)= ...

随机推荐

  1. 又见GCD

    Problem Description 有三个正整数a,b,c(0<a,b,c<10^6),其中c不等于b.若a和c的最大公约数为b,现已知a和b,求满足条件的最小的c.   Input ...

  2. 洛谷——P2212 [USACO14MAR]浇地Watering the Fields

    P2212 [USACO14MAR]浇地Watering the Fields 题目描述 Due to a lack of rain, Farmer John wants to build an ir ...

  3. something interesting when read docs

    When you kill a session with "ALTER SYSTEM KILL SESSION  '' ". If the session is performin ...

  4. 用Docker创建Nexus

    步骤如下: 1. 创建持久化目录 $ mkdir /some/dir/nexus-data && chown -R 200 /some/dir/nexus-data 2. 创建镜像并运 ...

  5. Solidworks在哪里找到内六角螺钉 内六角螺栓保准件

    GB-screws-凹头螺钉-出来了  

  6. 【Linux命令】--(1)文件文件夹操作命令15条

    文件文件夹操作命令++++++++++++++++++++++++++++++++++++++++ 列出进入显示文件夹     ls cd pwd  创建移动删除文件     mkdir rm rmd ...

  7. 百度开放云java+tomcat部署web项目-小皇帝詹姆斯

    加入部署 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/diss ...

  8. 软件project—思考项目开发那些事(一)

    阅读文件夹: 1.背景 2.项目管理,质量.度量.进度 3.软件开发是一种设计活动而不是建筑活动 4.高速开发(简单的系统结构与复杂的业务模型) 5.技术人员的业务理解与产品经理的业务理解的终于业务模 ...

  9. ubuntu 查看进程,查看服务

    jiqing@Ubuntu:~$ sudo netstat -anpl | grep :3306 tcp6 0 0 :::3306 :::* LISTEN 1532/mysqld jiqing@Ubu ...

  10. 面向画布(Canvas)的JavaScript库

    面向画布(Canvas)的JavaScript库 总结 每个库各有特色,根据需求选择   学习要点 面向画布(Canvas)的JavaScript库 EaselJS 是一个封装了 HTML5 画布(C ...