1. 程式人生 > >scala中隱式轉換之隱式類

scala中隱式轉換之隱式類

des object 同名 生成 ase end app scala getname

/**
  * Created by root
  * Description :隱式類:
  * 1.其所帶的構造參數有且只能有一個;並且構造器的參數是轉換之前的對象
  * 2.隱式類必須被定義在類,伴生對象和包對象裏
  * 3.隱式類不能是case class(case class在定義會自動生成伴生對象與2矛盾)
  * 4.作用域內不能有與之相同名稱的標示符
  */

class ImplicitTest3 {
    def getName = "ImplicitTest3"
}

object ImplicitUtils {
  implicit class StringImprovement(val s : String){   //
隱式類 def increment = s.map(x => (x +1).toChar) def toMore = (s.length,s.substring(1,3),s.contains("a")) } implicit class IntImprovement(val a : Int){ //隱式類 def square = a * a def cube = a * a * a } implicit class ImplicitTest3Improvement(val im : ImplicitTest3){ //隱式類 def getImName = im.getName } } object Main
extends App{ import ImplicitUtils._ println("hello".increment) // 編譯器在hello對象調用increment時發現對象上並沒有increment方法,此時編譯器就會在作用域範圍內搜索隱式實體, // 發現有符合的隱式類可以用來轉換成帶有increment方法的StringImprovement類,最終調用increment方法。 println("hello".toMore) println(2.square) println(3.cube) val im
= new ImplicitTest3 println(im.getImName) }

scala中隱式轉換之隱式類