登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
签到
每天签到奖励2-10圆
导读
排行榜
TG频道
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
VIP申请
VIP网盘
网盘
联系我们
发帖说明
每日签到
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
资源区
›
代码
›
Scala-隐式转换
Scala-隐式转换
[ 复制链接 ]
仲水悦
2025-6-5 08:16:40
隐式转换
精度小的类型可以自动转换为精度大的类型,这个转换过程无需开发人员参与,由编译器自动完成,这个转换操作我们称之为隐式转换。
如果程序编译出错,编译器会尝试在整个的作用域中查找能够让程序编译通过的方式
如果找到,那么编译器会尝试二次编译,让之前编译出现错误的代码经过转换后能够编译通过。
这个转换过程看不见,但是存在,就称之为隐式转换,所谓的隐式转换,其实就是类型的转换
隐式函数
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
println(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._
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
Scala
隐式
转换
相关帖子
国产化PDF处理控件Spire.PDF教程:Python 将 PDF 转换为 Markdown (含批量转换示例)
Excel: xls与xlsx格式转换排坑指南
格式转换全能王!一个开源自托管的文件转换神器
将 PDF 转换为 TIFF 图片:简单有效的 Java 教程
转换字符的一句话密码a
转换字符的一句话密码a木马
将openGLProgrammingGuide7/8版和openGLSuperBible7的源代码转换为C#
[20250409]GUID转换GUID_BASE64(补充3).txt
【LeetCode 108】算法:将有序数组转换为二叉搜索树
从零开始学Flink:数据转换的艺术
vip免费申请,1年只需15美金$
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
国产化PDF处理控件Spire.PDF教程:Python 将 PDF 转换为 Markdown (含批量转换示例)
0
848
洫伍俟
2025-08-01
业界
Excel: xls与xlsx格式转换排坑指南
0
108
仟仞
2025-08-01
安全
格式转换全能王!一个开源自托管的文件转换神器
0
639
热琢
2025-08-15
安全
将 PDF 转换为 TIFF 图片:简单有效的 Java 教程
0
622
豺独
2025-09-04
程序
转换字符的一句话密码a
0
62
新程序
2025-09-05
程序
转换字符的一句话密码a木马
0
25
新程序
2025-09-23
业界
将openGLProgrammingGuide7/8版和openGLSuperBible7的源代码转换为C#
0
549
仲秀娟
2025-09-24
安全
[20250409]GUID转换GUID_BASE64(补充3).txt
1
454
全叶农
2025-09-24
科技
【LeetCode 108】算法:将有序数组转换为二叉搜索树
0
901
杓疠?
2025-09-26
业界
从零开始学Flink:数据转换的艺术
0
480
痕厄
2025-10-01
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
仲水悦
2025-6-5 08:16:40
关注
0
粉丝关注
25
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
anyue1937
9994888
dage888
999994
3934307807
993690
4
富账慕
10007
5
柴古香
9992
6
匝抽
9986
7
筒濂
9980
8
孙淼淼
9989
9
凌彦慧
9985
10
崔瑜然
9984
查看更多