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...