擴展屬性是什麼
在Kotlin中,如果有需要的,擴展屬性就是在類的定義之外添加一個字段。這個字段並不會被真正的添加到類中,所以這個字段不能被初始化,不能被放到構造器和初始化語句塊中。
擴展屬性怎麼樣使用
來看一段代碼,如下:
var StringBuilder.lastChar: Char
get() = get(length - 1)
set(value: Char) {
this.setCharAt(length-1, value)
}
我們在類的外部爲StringBuilder添加類一個屬性lastChar,實現了它的getter和setter方法,怎麼樣使用呢?
fun main(args: Array<String>) {
val sb = StringBuilder("kotlin?")
println(sb.lastChar)
sb.lastChar = '!'
println(sb.lastChar)
}
//輸出結果爲:
// ?
// !
定義了一個StringBuilder類型的變量,打印這個對象中的最後一個字符,這時會調用lastChar中的getter方法,然後重新爲最後一個字符賦值,最後打印。
在Java中怎麼樣調用呢?
public class Test {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Kotlin?");
System.out.println(HelloKt.getLastChar(sb));
HelloKt.setLastChar(sb, '!');
System.out.println(HelloKt.getLastChar(sb));
}
}
// 打印結果爲:
// ?
// !
可以看到擴展屬性在Java中調用時,靜態屬性會變爲一個靜態方法。
總結
靜態屬性可以在一個類的外部定義一個屬性,這些屬性沒有任何的狀態,從Java中的調用可以看出,這些靜態屬性最後會被編譯爲靜態方法。