Kotlin學習(9) 屬性和字段

2021-08-14 14:59:32 字數 1936 閱讀 1720

1、宣告屬性

kotlin的類可以有屬性。屬性可以用關鍵字var宣告為可變的,否則使用唯讀關鍵字val

class address
要使用乙個屬性,只要用名稱引用它即可:

fun copyaddress(address: address): address
2、getters和setters

宣告乙個屬性的完整語法是:

var 

[:propertytype][=]

其初始化器(initalizer)、getter和setter都是可選的。屬性型別如果可以從初始化器中推斷出來,也可以省略。

//錯誤:需要顯式的初始化器,隱含預設getter和setter

var allbydefault:int?

//型別int,預設getter和setter

var initialized = 1

乙個唯讀屬性的語法和乙個可變的屬性的語法有兩個方面的不同:1、唯讀屬性用val代替var;2、唯讀屬性不允許setter

//型別int,預設getter必須在建構函式中初始化

val ******:int?

//型別int,預設getter

val inferredtype = 1

我們可以編寫自定義的訪問器,非常像普通函式,剛好在屬性宣告內部。例如:

val isempty:boolean

get() = this.size == 0

//如果可以從getter推斷出屬性,可以省略

val isempty get() = this.size == 0

自定義setter:

var stringprint: string

get() = this.tostring()

set(value)

3、幕後字段

kotlin中類不能有欄位。然而,當使用自定義訪問器時,有時會有必要擁有乙個幕後字段。kotlin提供乙個自動幕後字段,它可以通過使用field識別符號訪問。

var counter = 0

set(value)

}

4、幕後屬性

如果求不符合「隱式的幕後字段」,那麼可以使用幕後屬性:

private

var _table: map? = null

public val table: mapget()

return _table ?: throw assertionerror("set ot null by another thread")

}

5、編譯期常量

已知值的屬性可以使用const修飾符標記為編譯期常量。這些屬性需要滿足以下要求:

這些屬性可以用在註解中:

const val sd

:string = "this subsystem is ..."

@deprecated(sd)fun foo(){}

6、惰性初始化屬性

一般地,屬性宣告為非空型別必須在建構函式中初始化。然而,這經常不方便。例如:屬性可以通過依賴注入來初始化,或者在單元測試的setup方法中初始化。這種情況下,不能在建構函式內提供乙個非空初始器。但你仍然想在類體中引用該屬性是避免空檢查。

public

class mytest

@test fun test()

}

在使用該修飾符時,需滿足以下條件:

C 字段,屬性和屬性封裝字段

c 類成員包括 字段,屬性和方法。對於日常對於乙個類我們新增成員時會有幾種方法。如對於乙個person 類,我們對於其中乙個成員 性別 gender 進行定義,可以寫成 1,public string gender 2,public string gender 3,private string ge...

c 欄位和屬性

一 字段 field 可以在宣告欄位的同時賦給它乙個初始值。二 屬性 property 1 引入 假如將字段宣告為public,則在類的外部都可以對該字段進行訪問和更改,違背了類的封裝特性。如果宣告為private,則這種形式的封裝通常又過於徹底。例如,你可能希望欄位從外部唯讀,但從內部可以更改,但...

欄位和屬性(C )

類成員預設為私有成員。如果不為類成員新增訪問修飾符,那麼預設的是private。公共成員需要顯式指定。欄位和屬性是不同的兩個概念 欄位是類中實打實的一種變數。用來儲存與物件相關聯的資料。所以當欄位規定為public時,在當前類之外其他類中 隨 時隨地訪問和修改字段值 只要定義好當前類的例項即可,除s...