帝国和织梦那个做企业网站好,初中毕业学网站开发工程师,wordpress w按钮,自助建站广告发布隐式转换在如下三种不同的情况会被考虑#xff1a;1、当对象A调用某个方法时#xff0c;这个方法不存在例如在前一节介绍的1 to 10。会将Int转换为RichInt#xff0c;然后再调用to方法。在这种情况下#xff0c;会将对象A(方法的调用者)隐式转换为另一个对象。2、当对象A调…隐式转换在如下三种不同的情况会被考虑1、当对象A调用某个方法时这个方法不存在例如在前一节介绍的1 to 10。会将Int转换为RichInt然后再调用to方法。在这种情况下会将对象A(方法的调用者)隐式转换为另一个对象。2、当对象A调用某个方法这个方法也存在但是方法的参数类型不匹配假设我们为Test类定义了一个方法class Test{def print(a:A){//接受类型为A的参数...}}class A{...}class B{...}当我们调用A的print方法时传入的却是另一个类型Bval a new Aval bnew Ba.print(b)//传入的参数类型不匹配在参数类型不匹配的情况下scala编译器将会自动尝试将B的实例b转换为A的实例。即这种情况下是将方法的参数进行类型转换。3、当表达式的类型与预期的类型不同这只是第一、二种方式的扩展。因为表达式总是会返回一个值。当我们利用表达式返回的值调用方法时实际上是第一种方式进行的自动转换。如scala (if (10) 1 else 0) to 10res1: scala.collection.immutable.Range.Inclusive Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)当我们将表达式当做一个方法的参数时如果不匹配也会进行自动转换。上面已经介绍了隐式转换的三个规则即什么情况下会发生隐式转换。下一节我们将介绍如何实现隐式转换这需要通过一个隐式转换函数。