1 / 13
文档名称:

Scala编程详解类型参数.ppt

格式:ppt   大小:232KB   页数:13页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Scala编程详解类型参数.ppt

上传人:资料分享 2019/9/4 文件大小:232 KB

下载得到文件列表

Scala编程详解类型参数.ppt

文档介绍

文档介绍:北风网项目实战培训类型参数是什么?类型参数其实就类似于Java中的泛型。先说说Java中的泛型是什么,比如我们有Lista=newArrayList(),(1),没问题,("2"),(1)==2,对不对?肯定不对了,(1)获取的其实是个String——"2",String——"2"怎么可能与一个Integer类型的2相等呢?所以Java中提出了泛型的概念,其实也就是类型参数的概念,此时可以用泛型创建List,Lista=newArrayList[Integer](),那么,(1)没问题,("2")呢?就不行了,因为泛型会限制,只能往集合中添加Integer类型,这样就避免了上述的问题。那么Scala的类型参数是什么?其实意思与Java的泛型是一样的,也是定义一种类型参数,比如在集合,在类,在函数中,定义类型参数,然后就可以保证使用到该类型参数的地方,就肯定,也只能是这种类型。从而实现程序更好的健壮性。此外,类型参数是Spark源码中非常常见的,因此同样必须掌握,才能看懂spark源码。引言1、泛型类(案例:新生报到)2、泛型函数(案例:卡片售卖机)3、上边界Bounds(案例:在派对上交朋友)4、下边界Bounds(案例:领身份证)5、ViewBounds(案例:跟小狗交朋友)6、ContextBounds(案例:使用Scala内置的比较器比较大小)7、ManifestContextBounds(案例:打包饭菜)8、协变和逆变(案例:进入会场)9、ExistentialType课程大纲//泛型类,顾名思义,其实就是在类的声明中,定义一些泛型类型,然后在类内部,比如field或者method,就可以使用这些泛型类型。//使用泛型类,通常是需要对类中的某些成员,比如某些field和method中的参数或变量,进行统一的类型限制,这样可以保证程序更好的健壮性和稳定性。//如果不使用泛型进行统一的类型限制,那么在后期程序运行过程中,难免会出现问题,比如传入了不希望的类型,导致程序出问题。//在使用类的时候,比如创建类的对象,将类型参数替换为实际的类型,即可。//Scala自动推断泛型类型特性:直接给使用了泛型类型的field赋值时,Scala会自动进行类型推断。案例:新生报到,每个学生来自不同的地方,id可能是Int,可能是StringclassStudent[T](vallocalId:T){defgetSchoolId(hukouId:T)="S-"+hukouId+"-"+localId}valleo=newStudent[Int](111)泛型类//泛型函数,与泛型类类似,可以给某个函数在声明时指定泛型类型,然后在函数体内,多个变量或者返回值之间,就可以使用泛型类型进行声明,从而对某个特殊的变量,或者多个变量,进行强制性的类型限制。//与泛型类一样,你可以通过给使用了泛型类型的变量传递值来让Scala自动推断泛型的实际类型,也可以在调用函数时,手动指定泛型类型。案例:卡片售卖机,可以指定卡片的内容,内容可以是String类型或Int类型defgetCard[T](content:T)={if([Int])"card:001,"+contentelseif([String])"card:thisisyourcard,"+contentelse"card:"+content}getCard[String]("helloworld")泛型函数//在指定泛型类型的时候,有时,我们需要对泛型类型的范围进行界定,而不是可以是任意的类型。比如,我们可能要求某个泛型类型,它就必须是某个类的子类,这样在程序中就可以放心地调用泛型类型继承的父类的方法,程序才能正常的使用和运行。此时就可以使用上下边界Bounds的特性。//Scala的上下边界特性允许泛型类型必须是某个类的子类,或者必须是某个类的父类案例:在派对上交朋友classPerson(valname:String){defsayHello=println("Hello,I'm"+name)defmakeFriends(p:Person){}}classStudent(name:String)extendsPerson(name)classParty[T<:Person](p1:T,p2:T){defplay=(p2)}上边界Bounds//除了指定泛型类型的上边界,还可以指定下边界,即指定泛型类型必须是某个类的父类案例:领身份证classFather(valname:St