隱式轉換函式是以implicit
關鍵字宣告帶有單個引數的函式。這種函式將會自動應用
package top.mgy
object implicitdome
def main(args: array[string]): unit =
}
上面的將double
轉為int
的函式f1
將會自動應用的作用域中所有需要將double
轉int
的地方
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修飾過引數的方...