Scala之隐式转换

一、隐式转换需求

为一个已存在的类添加一个新的方法?

scala使用隐式转换方法:implicit

二、隐式转换示例一
object ImplicitApp extends App{

  //定义隐式转换函数即可,Man调用Superman的fly方法
  implicit def man2superman(man:Man):Superman = new Superman(man.name)
  
  val man = new Man("张三")
  man.fly()
}

class Man(val name:String){
  def eat(): Unit ={
    println(s"man[ $name ] eat .........")
  }
}

class Superman(val name:String){
  def fly(): Unit ={
    println(s"Superman[ $name ] fly .........")
  }
}

在这里插入图片描述

三、隐式转换示例二
import java.io.File

object ImplicitApp extends App{

  //定义隐式转换函数即可
  implicit def file2RichFile(file:File):RichFile = new RichFile(file)
  val f = new File("D:\\test\\test.txt")
  val txt = f.read()
  println(txt)

}

class RichFile(val file:File){
  def read()={
    scala.io.Source.fromFile(file.getPath).mkString
  }
}

在这里插入图片描述

四、隐式转换切面封装

建一个切面类,将上面三和四中的定义的隐式函数提取出来,并将切面类导入到需要使用的类中 【 import ImplicitAspect._ 】

import java.io.File

object ImplicitAspect {

  implicit def man2superman(man:Man):Superman = new Superman(man.name)
  implicit def file2RichFile(file:File):RichFile = new RichFile(file)
}

import java.io.File
import ImplicitAspect._

object ImplicitApp extends App{

  //定义隐式转换函数即可
 // implicit def man2superman(man:Man):Superman = new Superman(man.name)

  val man = new Man("张三")
  man.fly()

  //implicit def file2RichFile(file:File):RichFile = new RichFile(file)
  val f = new File("D:\\test\\test.txt")
  val txt = f.read()
  println(txt)

}

class Man(val name:String){
  def eat(): Unit ={
    println(s"man[ $name ] eat .........")
  }
}

class Superman(val name:String){
  def fly(): Unit ={
    println(s"Superman[ $name ] fly .........")
  }
}

class RichFile(val file:File){
  def read()={
    scala.io.Source.fromFile(file.getPath).mkString
  }
}
五、隐式参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值