1. 程式人生 > >Kotlin學習總結4

Kotlin學習總結4

1.by關鍵字:委託

val/var : by

var/val:屬性型別(可變/只讀) name:屬性名稱 Type:屬性的資料型別 expression:代理類 by關鍵字之後的表示式就是委託 屬性的get()方法(以及set() 方法)將被委託給這個物件的 getValue()和setValue()方法.屬性委託不必實現任何介面, 但必須提供 getValue() 函式(對於 var屬性,還需要 setValue() 函式)。在var變數就沒有get set方法,但是在val具備

interface ISports { fun doSports() }

class SwimForSports: ISports{ override fun doSports() { println(“do swim”) } } //使用by,就相當於將下面的正個類都委託給了sport,那麼就能通過返回的物件進行操作方法。 //如果不使用by sport 那麼這個類相當於要實現ISports介面,這樣就要實現其響應的方法。 class SportsManager(sport: ISports): ISports by sport

fun main(args: Array) { val swimSports: SwimForSports = SwimForSports() SportsManager(swimSports).doSports()// Log:do swim }

使用場景: 延遲載入屬性(lazy property): 屬性值只在初次訪問時才會計算 可觀察屬性(observable property): 屬性發生變化時, 可以向監聽器傳送通知, 將多個屬性儲存在一個 map 內, 而不是儲存在多個獨立的域內.

val no: Int by lazy { 200 } val c = 200 fun main(args: Array) { println(no) // Log : 200 }