Kotlin-擴展屬性

擴展屬性是什麼

在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中的調用可以看出,這些靜態屬性最後會被編譯爲靜態方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章