Scala學習 --------- 隱式轉換(難點)
阿新 • • 發佈:2018-11-23
隱式轉換:如果你希望對某個類進行擴充套件,就可使用隱式轉換語法,進行擴充套件。
隱式轉換案例:
案例1:
implicit class MyRichInt(x:Int){ //對Int進行擴充套件的一個方法 def add(a:Int,b:Int)={ a+b+x } } def main(args: Array[String]): Unit = { //呼叫自己擴充套件的方法 val sum=1.add(2,3) print(sum) } 隱式擴充套件類注意: //1、隱式類對Int類進行擴充套件 //2、構造方法中的引數,只能是1個,此引數的型別就是你要擴充套件的型別 //3、編寫萬隱式類之後,型別會自動擴充套件隱式類中的方法 //4、作用範圍是當前類
案例2:
//第一步:先把擴充套件的類編寫出來 package com.zzk3 /** * 擴充套件類 * 希望此類中的方法都擴充套件到Int類中 */ class MyRichInt1 { def add2(a:Int,b:Int): Int ={ a+b } def add3(a:Int,b:Int,c:Int): Int ={ a+b+c } def add4(a:Int,b:Int,c:Int,d:Int): Unit ={ a+b+c+d } } //第二步:隱式轉換方法 implicit def toInt(x:Int)=new MyRichInt1 //第三步:在本類測試 def main(args: Array[String]): Unit = { //呼叫自己擴充套件的方法 val sum1=1.add2(2,3) val sum2=1.add3(2,3,4) print(sum1) print(sum2) }
隱式引數,隱式值(形參,實參)
概念:只能給型別定義值,如果你給某個型別定義了值後,在呼叫方法時候沒有傳實參,則自動呼叫隱式引數的值。
案例:
package com.zzk3 class Test2 { //方法:隱式引數 def add(implicit a:String)={ print("----->"+a) } } object Test3{ def main(args: Array[String]): Unit = { //隱式值 implicit var ssss:String="lisi" implicit var s1:Int=12 val t2=new Test2 //正常使用 //t2.add("你好") //非正常使用 t2.add } }
注意:同一個作用域內只能有一種型別的一個隱式值