五、隱式轉換和隱式函式
5.1隱式轉換
implicit def a(d: double) = d.toint // 先宣告隱式函式,宣告後就不用管,程式過不去,會自動查詢。
val i1: int = 3.5 //(ok)當發現程式有誤時,scala編譯器會嘗試在隱式函式列表中查詢可以進行轉換的函式
注意:
5.2利用隱式轉換補充自定義類的功能
//如果需要為乙個類增加乙個方法,可以通過隱式轉換來實現。(動態增加)
如想為mysql增加乙個delete方法
class workerv1()
}class workerv2()
}//在實際使用時,如果需要為workerv1補充workerv2裡的功能,可以利用隱式轉換
implicit def workerv1tov2(d:workerv1):workerv2=
var workerv1=new workerv1();
workerv1.update();
workerv1.delete;
workerv1.update();
5.3隱式類
//通過隱式類解決,把需要轉換的源型別作為新型別的建構函式的引數。
implicit classworkerv3(d:workerv1)
}5.4隱式引數
//作用:可以幫助函式中,某種型別的引數設定統一的預設值。
defquery(implicitstring: string): unit =
defmain(args: array[string]): unit =
5.5 隱式的轉換時機
1) 型別不一致時
2) 缺少方法
3)缺少引數時
5.6隱式轉換的前提
1) 不能存在二義性
2) 優先選用顯示的宣告或者定義
5.7demo
//給當前日期加1天的效果implicit class d(d: date)
}var date = new date()
println(date)
date = date + 1
println(date)
//給當前日期加1秒的效果(此方法存在損失精度,不推薦)
implicit def d(date:date):long=date.gettime/1000var date = new date()implicit def e(l:long):date=
var date = new date()
println(date)
date = date + 1
println(date)
println(date)
date = date + 1
println(date)
Scala物件導向二
1.抽象類 在scala 中,使用 abstract 修飾的類稱為抽象類,在抽象類中可以定義屬性 未實現的方法和具體實現的方法 abstract class animal 2.繼承 繼承是物件導向的概念,用於 的可重用性,被擴充套件的類稱為超類或父類,擴充套件的類稱為派生類或子類,scala 可以通...
scala的物件導向程式設計
一 簡單的程式設計 1.scala的簡單程式設計 1 packageer2 3class people 9 def watchfootball teamname string string 12 13object two 22 2.效果 3.構造方法 主構造方法,輔助構造方法。輔助建構函式是在主建構...
Scala介紹二 物件導向
在物件導向學習中,scala的repl就不太合適了,所以需要使用ide來完成後續練習,idea最為流行,下面是在idea中建立scala專案的方法。參考文章 步驟一 首先我們在選單欄點選file new project,然後在彈出的頁面選擇scala,在右側點選idea,接下來我們輸入專案名稱,jd...