首页IT科技spark的转换函数(Scala-隐式转换)

spark的转换函数(Scala-隐式转换)

时间2025-06-20 10:24:26分类IT科技浏览4733
导读:隐式转换...

隐式转换

精度小的类型可以自动转换为精度大的类型             ,这个转换过程无需开发人员参与                   ,由编译器自动完成       ,这个转换操作我们称之为隐式转换            。

如果程序编译出错      ,编译器会尝试在整个的作用域中查找能够让程序编译通过的方式 如果找到                   ,那么编译器会尝试二次编译             ,让之前编译出现错误的代码经过转换后能够编译通过                    。 这个转换过程看不见      ,但是存在                   ,就称之为隐式转换,所谓的隐式转换             ,其实就是类型的转换

隐式函数

object ScalaImplicit { def main(args: Array[String]): Unit = { implicit def transform( d : Double ): Int = { d.toInt } var d : Double = 2.0 val i : Int = d printget="_blank">ln(i) } }

隐式函数实现程序功能的扩展

符合OCP

def main(args: Array[String]): Unit = { // 使用implicit声明的函数为隐式函数       。 implicit def thransform( user:User ): UserExt = { new UserExt() } val user = getUser() user.insertUser() user.updateUser() } class UserExt { def updateUser(): Unit = { println("update user...") } } class User { def insertUser(): Unit = { println("insert user...") } } def getUser() = { new User() }

隐式参数

def reg( implicit password : String = "000000" ): Unit = { println("默认密码:" + password) }

隐式变量

隐式参数不用传递,这个传递的过程由编译器完成 在同一个作用域中                   ,如果相同的转换规则的多个数据                   ,会发生错误 implicit val password : String = "111111" reg ==> 默认密码:111111

隐式类

在Scala2.10后提供了隐式类,可以使用implicit声明类             ,隐式类非常强大                   ,同样可以扩展类的功能       ,在集合的数据处理中             ,隐式类发挥了重要的作用            。

其所带的构造参数有且只能有一个 隐式类必须被定义在“类             ”或“伴生对象                   ”或“包对象       ”里                   ,即隐式类不能是顶级的                   。 def main(args: Array[String]): Unit = { val user = new User() user.insertUser() user.updateUser() } implicit class UserExt(user:User) { def updateUser(): Unit = { println("update user...") } } class User { def insertUser(): Unit = { println("insert user...") }

隐式机制

当前代码作用域

implicit class UserExt(user:User) { def updateUser(): Unit = { println("update user...") } }

父类或伴生对象

class Parent { implicit class UserExt(user:User) { def updateUser(): Unit = { println("update user...") } } } object Parent { implicit class UserExt(user:User) { def updateUser(): Unit = { println("update user...") } } }

特征或伴生对象

trait MyTrait { implicit class UserExt(user:User) { def updateUser(): Unit = { println("update user...") } } } object MyTrait { implicit class UserExt(user:User) { def updateUser(): Unit = { println("update user...") } }

在其他地方声明(包对象)

package object chapter { implicit class UserExt(user:User) { def updateUser(): Unit = { println("update user...") } } }

直接导入

import com.atguigu.bigdata.scala.test.TestTransform._

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
提高服务器性能的主要措施有哪些(怎么提升服务器运行稳定性) 电脑什么游戏能赚钱(电脑有什么游戏可以赚钱-是什么造就了中国游戏市场电脑游戏一家独大?)