隐式转换的时机和机制|学习笔记

简介: 快速学习隐式转换的时机和机制。

开发者学堂课程【Scala 核心编程-基础:隐式转换的时机和机制】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/609/detail/9011


隐式转换的时机和机制

 

内容介绍

隐式的转化时机

、隐式解析机制

 

一、隐式的转化时机

1、当方法中的参数的类型与目标类型不致时,会产生隐式转换

2、当对象调用所在类中不存在的方法或成员时,编译器会自动将对象进行隐式转换(根据类型)。

3、假如没有 mySQL . addSuffix( )那么 new mySQL1不会跟 DB1发生关联消息但是 sayok()没有下划线addsuffix()有下划线编译器扫描 mySQL 的作用域发现有一个隐式类可以用

//创建一个 MySQL1实例

val mySQL = new MySQL1

mySQL . sayOk( )

mySQL.addsuffix() //研究如何关联到 DB1$I (mySQL). addsuffix();

4、当方法中的参数的类型与目标类型不致时也会转换

implicit def f1(d: Double)int={接收 double 类型

d.toint

}

Def test1(n1: Int): Unit={

println("ok'

}

Test1(10.1)理论上报10是对的但是报1就错了类型不匹配隐式类型会出现在范围内去找找到就会用找不到就报错

赋值的本质底层也可能是一个函数

}

}

class DB1{}

成功运行

5、整理

(1)当方法中的参数的类型与目标类型不致时,或者是赋值时。

implicit def f1(d:Double): Int = {

d. toInt

}

def test1(n1:Int): Unit = {

println("ok")

}

test1(10.1 )

(2)当对象调用所在类中不存在的方法或成员时,编译器会自动将对象进行隐式转换(根据类型)


二、隐式解析机制

即编译器是如何查找到缺失信息的,解析具有以下两种规则:

1、首先会在当前代码作用域下查找隐式实体(隐式方法、隐式类、隐式对象)(一般是这种情况)。

2、如果第一条规则查找隐式实体失败,会继续在隐式参数的类型的作用域里查找。类型的作用域是指与该类型相关联的全部伴生模块,一个隐式实体的类型T它的查找范围如下(第二种情况范围广且复杂在使用时,应当尽量避免出现第二种情况):

(1)如果 T 被定义为 T with A with B with C,那么 A,B,C 都是 T 的部分,在 T 的隐式解析过程中,它们的伴生对象都会被搜索。

(2)如果 T 是参数化类型,那么类型参数和与类型参数相关联的部分都算作T的部分,比如 List[String]的隐式搜索会搜索 List 的伴生对象和 String 的伴生对象。

(3)如果T是一个单例类型 p.T,即 T 是属于某个 p 对象内,那么这个 p 对象也会被搜索。

(4)如果 T 是个类型注入 S#T,那么 S 和 T 都会被搜索。

主要是第一种要了解第二种直到即可正常情况下不会用这么复杂的解析

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
IDE 开发工具 开发者
IDLE的运行方式
IDLE的运行方式
1696 3
|
3月前
|
人工智能 Java 数据库
Spring AI
Spring AI 为 Java 生态注入智能,提供统一抽象接口,简化大模型集成,助力开发者高效构建 AI 应用,推动企业智能化转型。
683 147
|
4月前
|
安全 Java 编译器
Java类型提升与类型转换详解
本文详解Java中的类型提升与类型转换机制,涵盖类型提升规则、自动类型转换(隐式转换)和强制类型转换(显式转换)的使用场景与注意事项。内容包括类型提升在表达式运算中的作用、自动转换的类型兼容性规则,以及强制转换可能引发的数据丢失和运行时错误。同时提供多个代码示例,帮助理解byte、short、char等类型在运算时的自动提升行为,以及浮点数和整型之间的转换技巧。最后总结了类型转换的最佳实践,如避免不必要的转换、使用显式转换提高可读性、金融计算中使用BigDecimal等,帮助开发者写出更安全、高效的Java代码。
255 0
|
8月前
|
人工智能 自然语言处理 前端开发
面向六个月后的 AI Code,也许影响的不只是前端
本文探讨了AI在编程领域的快速发展及其对程序员职业的影响。随着AI技术的不断进步,特别是Codebase Indexing和MCP(Model Context Protocol)等技术的应用,AI已能够更好地理解企业内部知识并生成符合项目规范的代码。文章指出,未来六个月AI代码生成将形成“规范驱动→知识沉淀→协议贯通→智能执行”的闭环架构,大幅提升开发效率。同时, Anthropic CEO Dario Amodei预测,初级程序员可能在18个月内被AI取代,强调了职业规划更新的重要性。文章还对比了Function Call与MCP的技术路线,并提供了相关参考链接。
733 71
面向六个月后的 AI Code,也许影响的不只是前端
|
5月前
|
敏捷开发 监控 数据可视化
提升开发团队效率:2025年最受欢迎的IT开发进度工具选型推荐
在科技快速发展的背景下,高效管理软件开发进度成为团队成功的关键。本文深入解析IT开发进度工具的核心原理,结合7款主流工具的功能与适用场景,为不同规模的开发团队提供科学选型建议,助力提升项目管理效率和团队协作水平。
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
398 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
存储 Java Windows
java基础(9)数据类型中的char类型以及涉及到的转义字符
Java中的char类型可以存储一个中文字符,因为它占用两个字节。转义字符允许在代码中使用特殊字符,例如`\n`表示换行,`\t`表示制表符,`\\`表示反斜杠,`\'`表示单引号,`\"`表示双引号。可以使用`\u`后跟Unicode编码来表示特定的字符。
527 2
java基础(9)数据类型中的char类型以及涉及到的转义字符
|
存储 安全 网络安全
数据库安全措施有哪些?
【8月更文挑战第15天】数据库安全措施有哪些?
1009 1
|
SQL 关系型数据库 MySQL
MySQL数据库——多表查询(3)-自连接、联合查询、子查询
MySQL数据库——多表查询(3)-自连接、联合查询、子查询
1447 1
|
JavaScript
1.Electron开发环境搭建
1.Electron开发环境搭建
424 0