Scala 隐式转换 重要一点 什么事隐式转换
package com.xing.listfile
/**
* Created by DengNi on 2017/2/12.
* 简要说明 implicit 是什么 ? 就是从一个类的对象调用另外一个类方法
*/
//Method 1 OptimusPrime can not call AutoBots 's function BlowFire
// 增加 OptimusPrime object 对象 实现隐式转换
class OptimusPrime(val function :String) //此处 val 是必须的 ,不然找不到 optimusPrime.function
/**
object OptimusPrime{
implicit def optimusPrime2AutoBots(optimusPrime:OptimusPrime) = new AutoBots(optimusPrime.function)
}
**/
class AutoBots(function : String){
def blowFire = println(function + ": I can blow fire to fire you!!!")
}
//Method 2 定义一个不同类名字的 object 对象 ,zai main 方法里面引用这个 对象
object implictis {
implicit def optimusPrime2AutoBots(optimusPrime:OptimusPrime) = new AutoBots(optimusPrime.function)
}
object HelloImplicit {
def main(args: Array[String]) {
import implictis._
val op = new OptimusPrime("OptimusPrime")
println(op.blowFire)
//多参数
// talk("p1") 只传一个参数 指定是错的了
talk("p1")("p22")
// 但是我们就只想传一个 呢??
implicit val name2 ="eat you" //此处也引用了 隐式转换
talk2("p3")
}
// 定义一个函数 有两个参数
def talk(name1 : String)(name2:String) = println("thera are 2 param")
def talk2(name1 : String)(implicit name2:String) = println("thera are 2 param " +name2) // 此处 implicit 必须加
}
/**
"C:Program FilesJavajdk1.7.0_80injava" -Didea.launcher.port=7532 "-Didea.launcher.bin.path=C:Program Files (x86)JetBrainsIntelliJ IDEA Community Edition 2016.1.3in" -Dfile.encoding=UTF-8 -classpath "C:Program FilesJavajdk1.7.0_80jrelibcharsets.jar;C:Program FilesJavajdk1.7.0_80jrelibdeploy.jar;C:Program FilesJavajdk1.7.0_80jrelibextaccess-bridge-64.jar;C:Program FilesJavajdk1.7.0_80jrelibextdnsns.jar;C:Program FilesJavajdk1.7.0_80jrelibextjaccess.jar;C:Program FilesJavajdk1.7.0_80jrelibextlocaledata.jar;C:Program FilesJavajdk1.7.0_80jrelibextsunec.jar;C:Program FilesJavajdk1.7.0_80jrelibextsunjce_provider.jar;C:Program FilesJavajdk1.7.0_80jrelibextsunmscapi.jar;C:Program FilesJavajdk1.7.0_80jrelibextzipfs.jar;C:Program FilesJavajdk1.7.0_80jrelibjavaws.jar;C:Program FilesJavajdk1.7.0_80jrelibjce.jar;C:Program FilesJavajdk1.7.0_80jrelibjfr.jar;C:Program FilesJavajdk1.7.0_80jrelibjfxrt.jar;C:Program FilesJavajdk1.7.0_80jrelibjsse.jar;C:Program FilesJavajdk1.7.0_80jrelibmanagement-agent.jar;C:Program FilesJavajdk1.7.0_80jrelibplugin.jar;C:Program FilesJavajdk1.7.0_80jrelib
esources.jar;C:Program FilesJavajdk1.7.0_80jrelib
t.jar;D:igdataworkspaceskafSpStoutproductionkafSpSt;F:scalalibscala-actors-migration.jar;F:scalalibscala-actors.jar;F:scalalibscala-library.jar;F:scalalibscala-reflect.jar;F:scalalibscala-swing.jar;D:igdataworkspaceskafSpStlibfastjson-1.2.11.jar;D:igdataworkspaceskafSpStlibfastutil-7.0.11.jar;D:igdataworkspaceskafSpStlibkafka_2.10-0.8.2.1.jar;D:igdataworkspaceskafSpStlibmysql-connector-java-5.1.6.jar;D:igdataworkspaceskafSpStlibmysql-connector-java-5.1.8-bin.jar;D:igdataworkspaceskafSpStlibspark-assembly-1.6.0-hadoop2.6.0.jar;D:igdataworkspaceskafSpStlibspark-examples-1.6.0-hadoop2.6.0.jar;C:Program Files (x86)JetBrainsIntelliJ IDEA Community Edition 2016.1.3libidea_rt.jar" com.intellij.rt.execution.application.AppMain com.xing.listfile.HelloImplicit
OptimusPrime: I can blow fire to fire you!!!
()
thera are 2 param
thera are 2 param eat you
Process finished with exit code 0
**/