隐式转换
- scala提供的隐式转换和隐式参数功能,是非常有特色的功能。是java的编程语言所没有的功能。他可以允许你手动指定,将某种类型的对象转换成其他类型的对象或者是给一个类增加方法。通过这些功能,可以实现非常强大、特殊的功能。
隐式转换核心就是定义一个使用implicit 关键字修饰的方法实现把一个原始类转换成目标类,进而可以调用目标类中的方法
隐式参数
- 隐式参数指的是在函数或方法中,定义一个implicit修饰的参数,此时scala会尝试找到指定 一个指定类型的用implicit修饰的参数,即隐式值,并注入 参数
所有的隐式转换和隐式参数必须定义在一个object钟
示例
object MyPredef{
implicit def file2RichFile(file:File)= new RichFile(file)
}
class RichFile(val file:File){
def read():String={
Source.fromFile(file).mkString
}
}
object RichFile{
def main(args: Array[String]): Unit = {
val file = new File("words.txt")
import MyPredef.file2RichFile
val data:String = file.read()
}
}
class C
class A(c:C){
def readBook(){
println("A说:读书")
}
}
class B(c:C){
def readBook(): Unit ={
println("B说:读不懂")
}
def writeBook(): Unit ={
println("B说:不会写")
}
}
object AB{
implicit def C2A(c:C)=new A(c)
implicit def C2B(c:C)=new B(c)
}
object B{
def main(args: Array[String]): Unit = {
import AB._
val c=new C
c.readBook()
c.writeBook()
}
}
class Boss{
def callName(implicit name:String): String ={
name+" is coming !"
}
def getMoney(implicit money:Double): String ={
" 当月薪水:"+money
}
}
object Company{
implicit val xxx="zhangsan"
implicit val yyy=10.00
implicit val zzz="lisi"
}
object Boss extends App{
import Company.{yyy,zzz}
val boss =new Boss
println(boss.callName+boss.getMoney)
}