隐式转换
隐式转换就是将原来类没有的功能,给他加上新的功能。在项目中能不用就不用,会涉及到不好阅读。比如以下功能,原来狗是没有说话的能力,加上说话的功能。
一个普通的狗:
class Dog(val name:String)
一个会讲话的狗:
class SpeakDog{
def speak: Unit ={
println("I am SuperDog")
}
}
现在要做的功能,就是将一个普通的狗加上讲话的功能。所以定义一个转换,将一条普通的狗导入,然后将新的讲话狗返回:
object ImplicitAspect{
//定义隐式转换函数
implicit def dogToSpeakDag(dog:Dog):SpeakDog = new SpeakDog()
}
这里有个规范,方法的名称一般是原类To新类。主要这个不是替换,是向原类中增加新类中的功能,关键字:implicit
这样这条狗就增加了新的功能,那就是叫。
调用:
val dog = new Dog("I am Dog")
dog.speak
dog.name
这个调用的前提,就是要导入包,不然会报错import com.ruozedata.ImplicitAspect.dogToSpeakDag。
工程上常常把这个转换的方法统一的放在一起,一来便于管理,二来,如果前辈偷偷的定义了,你有看不出来,那么维护起来非常麻烦。