Scala编程详解类型参数.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
北风网项目实战培训 类型参数是什么?类型参数其实就类似于Java中的泛型。先说说Java中的泛型是什么,比如我们有List a = new ArrayList(),接着a.add(1),没问题,a.add(2),然后我们a.get(1) == 2,对不对?肯定不对了,a.get(1)获取的其实是个String——2,String——2怎么可能与一个Integer类型的2相等呢? 所以Java中提出了泛型的概念,其实也就是类型参数的概念,此时可以用泛型创建List,List a = new ArrayList[Integer](),那么,此时a.add(1)没问题,而a.add(2)呢?就不行了,因为泛型会限制,只能往集合中添加Integer类型,这样就避免了上述的问题。 那么Scala的类型参数是什么?其实意思与Java的泛型是一样的,也是定义一种类型参数,比如在集合,在类,在函数中,定义类型参数,然后就可以保证使用到该类型参数的地方,就肯定,也只能是这种类型。从而实现程序更好的健壮性。 此外,类型参数是Spark源码中非常常见的,因此同样必须掌握,才能看懂spark源码。 引言 1、泛型类(案例:新生报到) 2、泛型函数(案例:卡片售卖机) 3、上边界Bounds(案例:在派对上交朋友) 4、下边界Bounds(案例:领身份证) 5、View Bounds(案例:跟小狗交朋友) 6、Context Bounds(案例:使用Scala内置的比较器比较大小) 7、Manifest Context Bounds(案例:打包饭菜) 8、协变和逆变(案例:进入会场) 9、Existential Type 课程大纲 // 泛型类,顾名思义,其实就是在类的声明中,定义一些泛型类型,然后在类内部,比如field或者method,就可以使用这些泛型类型。 // 使用泛型类,通常是需要对类中的某些成员,比如某些field和method中的参数或变量,进行统一的类型限制,这样可以保证程序更好的健壮性和稳定性。 // 如果不使用泛型进行统一的类型限制,那么在后期程序运行过程中,难免会出现问题,比如传入了不希望的类型,导致程序出问题。 // 在使用类的时候,比如创建类的对象,将类型参数替换为实际的类型,即可。 // Scala自动推断泛型类型特性:直接给使用了泛型类型的field赋值时,Scala会自动进行类型推断。 案例:新生报到,每个学生来自不同的地方,id可能是Int,可能是String class Student[T](val localId: T) { def getSchoolId(hukouId: T) = S- + hukouId + - + localId } val leo = new Student[Int](111) 泛型类 // 泛型函数,与泛型类类似,可以给某个函数在声明时指定泛型类型,然后在函数体内,多个变量或者返回值之间,就可以使用泛型类型进行声明,从而对某个特殊的变量,或者多个变量,进行强制性的类型限制。 // 与泛型类一样,你可以通过给使用了泛型类型的变量传递值来让Scala自动推断泛型的实际类型,也可以在调用函数时,手动指定泛型类型。 案例:卡片售卖机,可以指定卡片的内容,内容可以是String类型或Int类型 def getCard[T](content: T) = { if(content.isInstanceOf[Int]) card: 001, + content else if(content.isInstanceOf[String]) card: this is your card, + content else card: + content } getCard[String](hello world) 泛型函数 // 在指定泛型类型的时候,有时,我们需要对泛型类型的范围进行界定,而不是可以是任意的类型。比如,我们可能要求某个泛型类型,它就必须是某个类的子类,这样在程序中就可以放心地调用泛型类型继承的父类的方法,程序才能正常的使用和运行。此时就可以使用上下边界Bounds的特性。 // Scala的上下边界特性允许泛型类型必须是某个类的子类,或者必须是某个类的父类 案例:在派对上交朋友 class Person(val name: String) { def sayHello = println(Hello, Im + name) def makeFriends(p: Person) { sayHello p.sayHello } } class St

文档评论(0)

a13355589 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档