1.隐式转换
隐式转换是一项强大的程序语言功能,它不仅能够简化程序设计,也能够使程序具有很强的灵活性。
隐式函数的名称对结构没有影响.函数可以是任何名字,只看参数与返回,也就是看能不能把传入的参数变成需要的类型就行了。
隐式转换可以定义在目标文件当中,即隐式转换函数与目标代码在同一个文件当中,
也可以将隐式转换集中放置在某个包中,在使用时直接将该包引入即可,后者更常见。
隐式转换发生的时间:
1.当方法中参数的类型与实际类型不一致时
2.当调用类中不存在的方法或成员时,会自动将对象进行隐式转换
2.隐式参数
在一般的函数据定义过程中,需要明确传入函数的参数,如果给函数定义隐式参数的话,则在使用时可以不带参数.
3.蘑菇云代码
package com.dtspark.scala.basics
/**
* 人是如何变成超人的!
*/
/**
*这是一个人。
*/
class Man(val name: String)
/*object Man{
implicit def man2SuperMan(man: Man) = new SuperMan(man.name)
}*/
/**
*这是一个超人,看他们之间是没有任何关系的
*/
class SuperMan(val name: String){
//超人有超能力。
def Superpowers = println("Wow,wow,wow," + this.name +" get a super natural power, will save the world now!!")
}
/**
* 这是变身的条件
*/
object implicts{
implicit def man2SuperMan(man: Man) = new SuperMan(man.name)
}
object HelloImplicits {
def main(args: Array[String]): Unit = {
println("=======隐式转换=========")
import com.dtspark.scala.basics.implicts._
//创建一个人出来
val man = new Man("王大锤")
//没有引入import com.dtspark.scala.basics.implicts._时这个人是不能使用超能力的。
//所谓隐式转换就是把一个对象转换成另一个对象的过程,目的是调用另一个对象的方法
man.Superpowers
println("=======隐式参数=========")
implicit val content = "Dollar"
//talk要传入两个参数,第二个是隐式的,它会自己去找一个隐式的变量。
//implicit val contentA = "wangdada"如果我这里再定义一个满足String要求的隐式变量,会找不到而报错。
//隐式参数只看参数类型不管参数名称
//mplicit val contentB = "gao"
talk("Scala")
}
def talk(name: String)(implicit content:String) = println(name + " : " +content)
}
以上内容来自[DT大数据梦工厂]首席专家Spark专家王家林老师的课程分享。感谢王老师的分享,更多精彩内容请扫描关注[DT大数据梦工厂]微信公众号DT_Spark