Scala学习-7.隐式转换机制

/**
scala的隐式转换机制
知识点
1.scala implicit关键字用于定义隐式方法、隐式类、隐式对象
2.隐式转换的作用:当一个转换不合法时,在当前的作用域能够找到对应的隐式转换,使得转换合法
3.定义隐式转换方法时,方法名自定义,但参数列表只能有一个
4.隐式转换不能存在二义性,即在同一作用域中,只有存在一种类型转换
5.通过隐式类,可以让用户灵活的自定义和扩充方法。注意:定义隐式类时,主构造器的参数只能有一个
*/
object Demo {
 
  println("Welcome to the Scala worksheet")       //> Welcome to the Scala worksheet
  
  val v1=100                                      //> v1  : Int = 100
  
  //显式类型转换。格式固定:to指定类型
  val v2:String=v1.toString()                     //> v2  : String = 100
  
  //一、定义一个隐式转换方法
  implicit def f1(x:Int)={x.toString()}           //> f1: (x: Int)String
  
  val v3:String=v1                                //> v3  : String = 100
  
  //二、隐式类
  implicit class AuthMethod(x:String){
          
          def suffix()={
              x.takeRight(4)
          }
          
          def prefix()={
              x.dropRight(4)
          }
  }
  
  
  val s1="fil01.txt"                              //> s1  : String = fil01.txt
  
  //调用suffix方法,获取文件名的后缀
  s1.suffix                                       //> res0: String = .txt
  
  s1.prefix                                       //> res1: String = fil01
  
  //三、隐式对象
  
  trait Adder[T]{
          def add(x:T,y:T):T
  }
  
  def f2(a:Int,b:Int)(implicit adder:Adder[Int])={
      adder.add(a,b)
  }                                               //> f2: (a: Int, b: Int)(implicit adder: Demo10.Adder[Int])Int
  
  f2(2,3)(new Adder[Int]{
       def add(x:Int,y:Int)={x+y}
  })                                              //> res2: Int = 5
  
  //隐式对象
  implicit val a=new Adder[Int]{
      def add(x:Int,y:Int)={x+y}
  }                                               //> a  : Demo10.Adder[Int] = Demo10$$anonfun$main$1$$anon$2@7f63425a
  
  f2(2,3)(a)                                      //> res3: Int = 5
  
  f2(2,3)                                         //> res4: Int = 5
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容