什么时候要进行隐式转换?
- 当对象调用类中 不存在 的方法或成员时,编译器会自动将对象进行隐式转换
- 当方法中的参数类型与目标类型不一致时
编译器查找到缺失信息的方式
解析具有以下两种规则:
- 首先会在当前代码作用域下查找隐式实体(隐式方法、隐式类、隐式对象)。 推荐
- 如果第一条规则查找隐式实体失败,会继续在隐式参数的类型的作用域里查找。 类型的作用域是指与该类型相关联的全部伴生模块,一个隐式实体的类型T它的 查找范围如下(第二种情况范围广且复杂在使用时,应当 尽量避免出现):
- 如果T被定义为T with A with B with C,那么A,B,C都是T的部分,在T的隐式解析 过程中,它们的伴生对象都会被搜索。
- 如果T是参数化类型,那么类型参数和与类型参数相关联的部分都算作T的部分, 比如List[String]的隐式搜索会搜索List的伴生对象和String的伴生对象。
- 如果T是一个单例类型p.T,即T是属于某个p对象内,那么这个p对象也会被搜索。
- 如果T是个类型注入S#T,那么S和T都会被搜索。