Scala学习——implicit的使用
隐式类的使用:
1 object Test { 2 def main(args: Array[String]): Unit = { 3 import Test1._ --将整个object导进来 4 println(1.add(2)) --看隐式类的构造器是不是传入int型参数,是就可以调用隐式类中的方法——BBB 5 println(new File("c:\\aaa.txt").read) --看传入的是不是file类型——用的AAA中的方法 (类名可以随意起) 6 } 7 } 8 9 object Test1{ 10 implicit class AAA(f: File){ 11 def read=Source.fromFile(f.getPath).mkString 12 } 13 14 implicit class BBB(i: Int){ 15 def add(j: Int) = i + j 16 } 17 }
其余隐式的调用:
1 package com.dtspark.scala.basics 2 3 /** 4 * 隐式implicit的两种方法使用,和一种参数使用 5 */ 6 class Man(val name:String) 7 object Man{//第一种方法,在其自身的object中写implicit 8 implicit def man2superman(man:Man)=new SuperMan(man.name) 9 } 10 class SuperMan(val name:String){ 11 def makeMiracles = println(this.name+" wow") 12 } 13 14 //第二种方法 15 object implicits{ 16 implicit def man2superman(man:Man)=new SuperMan(man.name) 17 } 18 object HelloImplicits { 19 def main(args: Array[String]): Unit = { 20 //第二种方法,写一个implicits object 21 //里面放着所有要用的implicit方法,注意一定要加_表示导入所有方法 22 import implicits._ 23 val man = new Man("Scala") 24 man.makeMiracles 25 26 talk("Scala")("Money") 27 implicit val content="默认" 28 //如果第二个参数是implicit参数,如果不传入会报错, 29 //但是编译时会自动找上下文看有没有叫content的隐式参数,如果有则不会出错,经常用于默认值设定 30 //当然导入隐式参数后也可以复写隐式参数 31 talk("Scala") 32 } 33 34 def talk(name:String)(implicit content:String)=println(name+" : "+content) 35 }
浙公网安备 33010602011771号