Scala 隐式转换 implicit
2019-11-23 本文已影响0人
数星星的鱼
隐式转换:在原有对象不做任何修改的情况下,为其添加新功能
隐式转换关键字:implicit
方式一:implicit 作用于方法
class RichMan(name:String){
def eatMeat(): Unit ={
println(name + " 有钱人吃山珍海味")
}
}
class Man(val name:String){
def eat(): Unit ={
println(name + " 普通人吃五谷杂粮")
}
}
// 隐式转换,让 Man 类型 拥有 RichMan 的功能
implicit def rick(m:Man) = new RichMan(m.name)
def main(args: Array[String]): Unit = {
val man = new Man("tom")
man.eat()
man.eatMeat() // 通过隐式转换让 man 拥有 RichMan 的功能
}
方式二:implicit 作用于类
// 隐式转换,让 Man 类型 拥有 RichMan 的功能
implicit class RichMan(m:Man){
def eatMeat(): Unit ={
println(m.name + "有钱人吃山珍海味")
}
}
class Man(val name:String){
def eat(): Unit ={
println(name + "普通人吃五谷杂粮")
}
}
def main(args: Array[String]): Unit = {
val man = new Man("tom")
man.eat()
man.eatMeat()
}
方式二:implicit 作用于参数
// 隐式转换,该方法需要一个 Man类型的隐式参数
def eatMeat(implicit m:Man): Unit ={
println(m.name + " 有钱人吃山珍海味")
}
class Man(val name:String){
def eat(): Unit ={
println(name+" 普通人吃五谷杂粮")
}
}
def main(args: Array[String]): Unit = {
// 声明变量 man 为隐式参数,可传递给其他需要隐式参数的地方使用
implicit val man = new Man("tom")
man.eat()
eatMeat
}