2023学年完整公开课版隐式转换_第1页
2023学年完整公开课版隐式转换_第2页
2023学年完整公开课版隐式转换_第3页
2023学年完整公开课版隐式转换_第4页
2023学年完整公开课版隐式转换_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

隐式转换为什么需要隐式转换隐式参数和隐式转换为什么需要隐式转换/01

我们需要某个类中的一个方法,但是这个类没有提供这样的一个方法,所以我们需要隐式转换,转换成提供了这个方法的类,然后再调用这个方法第一步,需要一个增强的类,里面提供我们想要的方法,接收的参数的类型一定要是被增强类的类型。第二部,还需要在单例对象中写明隐式转换第三步,把隐式转换函数导进来为什么需要隐式转换

在spark中隐士转换都写在伴生对象中,因为类的实例肯定能找到伴生对象的,在一个作用域当中。代码示例如下:为什么需要隐式转换

隐式参数和隐式转换/02 隐式参数的意义是当方法需要多个参数的时候,可以定义一些隐式参数,这些隐式参数可以被自动加到方法填充的参数里,而不必手填充。上面这个代码中implicitParamFunc中的第二个参数定义成了隐式参数。然后在Zoo对象里定义了两个隐式变量,import进来之后,调用implicitParamFunc方法的时候这两个变量被自动填充到了参数里。这里需要注意的是不仅仅方法中的参数需要被定义成隐式参数,对应的隐式参数的变量也需要被定义成隐式变量。隐式参数和隐式转换 比如以下一个例子,定义一个Int类型的变量num,但是赋值给了一个Double类型的数值。这时候就会编译错误:valnum:Int=3.5//CompileError但是我们加了一个隐式转换之后,就没问题了:implicitdefdouble2Int(d:Double)=d.toIntvalnum:Int=3.5//3,这段代码会被编译成valnum:Int=double2Int(3.5)隐式参数和隐式转换隐式转换类型:1、隐式转换成正确的类型这种类型是Scala编译器对隐式转换的第一选择。比如说编译器看到一个类型的X的数据,但是需要一个类型为Y的数据,那么就会去找把X类型转换成Y类型的隐式转换implicitdefdouble2Int(d:Double)=d.toIntvalnum:Int=3.5//当编译器发现变量num是个Int类型,并且用Double类型给它赋值的时候,会报错。但是在报错之前,编译器会查找Double=>Int的隐式转换。然后发现了double2Int这个隐式转换函数。于是就使用了隐式转换隐式参数和隐式转换隐式转换类型:2、方法调用的隐式转换比如这段代码obj.doSomeThing。比如obj对象没有doSomeThing这个方法,编译器会会去查找拥有doSomeThing方法的类型,并且看obj类型是否有隐式转换成有doSomeThing类型的函数。有的话就是将obj对象隐式转换成拥有doSomeThin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论