scala隐式转换

注:为已经存在的类新添加一个方法【增强已有类的方法】

一、切面封装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def main(args: Array[ String ]): Unit = {
//隐式转换(man 可以调用 superman中的方法)
implicit def man2superMan(mans:man):superMan=new superMan(mans.name)

val newMan=new man("dd")
newMan.fly()

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

可以将隐式转换的方法封装到一个类中,之后直接引用该类

二:隐式参数

注:在函数或者方法中定义一个用implict 修饰的参数,此时Scala会尝试找到一个指定类型的,用implict修饰的对象。既隐世值,并注入参数

三、隐式类

四、转换原则

原则:如果转换存在二义性,则不会发生隐式转换

1
2
3
4
5
6
7
8
9
10
object ImplicitFunction extends App{
implicit def double2Int(x:Double)=x.toInt
var x:Int=3.5
//隐式函数将java.io.File隐式转换为RichFile类
implicit def file2RichFile(file:File)=new RichFile(file)
//File类的对象并不存在read方法,此时便会发生隐式转换
//将File类转换成RichFile
val f=new File("file.log").read
println(f)
}

加载数据

问:对于scala中隐式转换的看法

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2018-2020 丁振莹
  • 访问人数: | 浏览次数:

你的每一分支持,是我努力下去的最大的力量 ٩(๑❛ᴗ❛๑)۶

支付宝
微信