1. 程式人生 > >6、Scala隱式轉換

6、Scala隱式轉換

一、Scala隱式轉換使用場景

    1、用於從一種型別到另一種型別的轉換

    2、用於缺少引數方法的呼叫

二、Scala隱式轉換分類

    1、隱式方法

      implicit def intToString(x: Int) = x.toString

    2、隱式類

      implicit class RichFile(file: File) {

          def read = Source.fromFile(file).mkString

        }

      new java.io.File(".").read

    3、隱式物件

      implicit object StringOrdering extends Ordering[String] {

          override def compare(x: String, y: String): Int = x.length - y.length

        }

    4、隱式變數

     implicit val test = 5

    5、隱式引數

     implicit val test = 5

     findAnInt

     def findAnInt(implicit x: Int) = x

三、隱式轉換規則

    1、如果表示式不符合編譯器要求的型別,編譯器會查詢能使之符合型別要求的隱式轉換

    2、如果T型別中沒有成員e,但是我們還是想通過T.e來訪問e那麼編譯器會查詢能應用到T型別並且返回型別包含成員e的隱式轉換

四、隱式查詢的規則


    1、隱式實體在查詢發生的地點可見(可以通過import將隱式實體繫結到當前作用域)

    2、如果按照第一條規則沒有找到隱式實體的話,那麼會在源型別和目標的型別(T)的隱式作用域裡包含的所有隱式實體中查詢

        2.1、型別T以及它的父類的伴生物件

        2.2、引數化型別T的所有的型別引數的伴生類

        2.3、型別T或者型別T的型別引數所在的物件(object)

        2.4、包物件