Scala之隱式轉換

2021-10-04 04:45:28 字數 2043 閱讀 2246

隱式轉換函式是以implicit關鍵字宣告帶有單個引數的函式。這種函式將會自動應用

package top.mgy

object implicitdome

def main(args: array[string]): unit =

}

上面的將double轉為int的函式f1將會自動應用的作用域中所有需要將doubleint的地方

package top.mgy;

import scala.predef.

;import scala.runtime.boxesruntime;

public

final

class

implicitdome$

//底層編譯器會自動生成該方法

public

intf1

(double d)

public

void

main

(string[

] args)

private implicitdome$(

)}

細節說明

object implicitdome2  

def main(args: array[string]): unit =

}class mysql

}class db

}

看反編譯原始碼

public db f1

(mysql mysql)

public

void

main

(string[

] args)

隱式值也叫隱式變數, 將某個形參變數標記為implicit,所以編譯器會在方法沒傳引數的情況下去作用域內搜尋可以匹配的隱式值作為預設引數

object implicitvaluedome 

def hello(implicit str:string)=

}

反編譯原始碼檢視

public

void

main

(string[

] args)

public

void

hello

(string str)

在scala2.10中提供了隱式類可以使用implicit宣告類,隱式類很強大,同樣可以擴充套件類的功能,比以前的隱式轉換功能更加方便,在集合中隱式類發揮了重要作用。

隱式類的特點

定義隱式類

object implicitclassdome 

}val mysql = new mysql22

mysql.printok()

mysql.addsuffix()

}}class mysql22

}

底層實現原始碼

//其本質是在呼叫隱式類方法時 建立乙個隱式類物件,並將本類傳入,呼叫該方法

public

void

main

(string[

] args)

//implicitclassdome$db$2 隱式類

private

final implicitclassdome$db$2 db$1

(mysql22 m)

Scala隱式轉換之隱式引數 1

函式或者方法可以帶有乙個標記為implicit的引數。在這種情況下,編譯器將會查詢預設值,提供給該函式或者方法。示例 case class d left string,right string def quote title string implicit d d d.left title d.ri...

scala 隱式轉換

defdisplay input string unit println input implicit deftypeconvertor input int string input.tostring implicit deftypeconvertor input boolean string if...

scala 隱式轉換

隱式轉換就是 當scala編譯器進行型別匹配時,如果找不到合適的候選,那麼隱式轉化提供了另外一種途徑來告訴編譯器如何將當前的型別轉換成預期型別。使用方式 將方法或變數標記為implicit 將方法的引數列表標記為implicit 將類標記為implicit 宣告乙個帶有implicit修飾過引數的方...