scala学习笔记-隐式转换和隐式参数

隐式转换
  • scala提供的隐式转换和隐式参数功能,是非常有特色的功能。是java的编程语言所没有的功能。他可以允许你手动指定,将某种类型的对象转换成其他类型的对象或者是给一个类增加方法。通过这些功能,可以实现非常强大、特殊的功能。
  • 隐式转换核心就是定义一个使用implicit 关键字修饰的方法实现把一个原始类转换成目标类,进而可以调用目标类中的方法
隐式参数
  • 隐式参数指的是在函数或方法中,定义一个implicit修饰的参数,此时scala会尝试找到指定 一个指定类型的用implicit修饰的参数,即隐式值,并注入 参数
  • 所有的隐式转换和隐式参数必须定义在一个object钟
示例
// 示例1 隐式转换
object MyPredef{
  //定义一个隐式装换方法,把File转换成RichFile
  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 = {
    // 1、构建一个File对象
    val file = new File("words.txt")
    // 手动导入隐式装换
    import  MyPredef.file2RichFile

    val data:String = file.read()

  }
}
// 示例2 隐式转换
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._ 会将AB类下的所有隐式转换导入进来
    // import AB.C2A 只会导入C类到A类的隐式转换方法
    // import AB.C2B 只会导入C类到B类的隐式转换方法
    import AB._
    val c=new C
    // 由于A类和B类中都有readBook(),只能导入其中一个,否则调用共同方法是代码报错
    c.readBook()
    // c类可以执行B类中的writeBook()
    c.writeBook()

  }
}
// 示例3 隐式参数
class Boss{
  //定义一个用implicit修饰的参数 类型为String
  // 注意参数匹配的类型  需要String类型的隐式值
  def callName(implicit name:String): String ={
    name+" is coming !"
  }

  //定义一个用implicit修饰的参数 类型为Double
  // 注意参数匹配的类型  需要Double类型的隐式值
  def getMoney(implicit money:Double): String ={
    " 当月薪水:"+money
  }
}

object Company{
  // 在object中定义隐式值
  // 注意:同一类型的隐式值只能出行一次
  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)
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值