前面我们学习了Scala中的隐式函数和隐式参数,今天我们继续学习隐式对象和隐式类。
(一)隐式对象
隐式对象是一个带有implicit关键字的单例对象,它可以用于提供某种类型的实例以供隐式转换使用。隐式对象通常用于将某个类或trait的实例隐式地注入到方法中。
目标: 已有一个写好的类,要求在不修改源代码的情况下,拓展这个类的新功能!
思路:
1.补充定义一个新类,在这个新类中提供新方法;
2.提供一个隐式转换函数,把之前旧类对象转换成这个新类对象。
package imp
/*
目标:已有一个写好的类,要求在不修改源代码的情况下,拓展这个类的新功能!
思路:
1.补充定义一个新类,在这个新类中提供新方法;
2.提供一个隐式转换函数,把之前旧类对象转换成这个新类对象。
* */
object imp04 {
class User() {
def inserUser():Unit = {
println("inserUser..........")
}
}
class UserStrong() {
def updateUser():Unit = {
println("updateUser..........")
}
}
implicit def XXXXX(user: User):UserStrong={
println("自动调用隐式转换函数........")
new UserStrong
}
def main(args: Array[String]): Unit = {
val u1 = new User()
u1.inserUser()
//val u2 = new UserStrong
u1.updateUser()
//u2.updateUser()
}
}
(二)隐式类
有一个现有的类。现在我们需要对这个类的功能进行拓展,额外补充一个方法。但是,不允许直接修改原来的类的代码。
假设这里有一个类User,它的内部有一个方法 insertUser
package imp
/*
目标:已有一个写好的类,要求在不修改源代码的情况下,拓展这个类的新功能!
思路:
1.补充定义一个新类,在这个新类中提供新方法;
2.提供一个隐式转换函数,把之前旧类对象转换成这个新类对象。
隐式类
implicit class
作用:在不修改原来类的基础之后,增加新的功能
* */
object imp04 {
class User() {
def inserUser():Unit = {
println("inserUser..........")
}
}
implicit class UserStrong(user: User) {
def updateUser():Unit = {
println("updateUser..........")
}
}
//implicit def XXXXX(user: User):UserStrong={
// println("自动调用隐式转换函数........")
// new UserStrong
//}
def main(args: Array[String]): Unit = {
val u1 = new User()
u1.inserUser()
//val u2 = new UserStrong
u1.updateUser()
//u2.updateUser()
}
}