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 }

 

posted @ 2017-02-17 16:31  LazyJoJo  阅读(560)  评论(0)    收藏  举报