Android(安卓)Kotlin入门-属性和字段
16lz
2021-01-24
正文:
类可以有属性,你可以定义可变的属性或者不可变的属性(var可变,val不可变)。形如:
public class Address { public var name: String = ... public var street: String = ... public var city: String = ... public var state: String? = ... public var zip: String = ...}使用一个属性,往往是访问其名字。形如:
fun copyAddress(address: Address): Address { val result = Address() // there's no 'new' keyword in Kotlin result.name = address.name // accessors are called result.street = address.street // ... return result}
Getters and Setters
语法声明的形式:var <propertyName>: <PropertyType> [= <property_initializer>] [<getter>] [<setter>]初始化getter和setter是可选的,如果属性的类型如果可以从初始化或从基类成员被覆盖推断出来就可以省略。形如:
var allByDefault: Int? // error: explicit initializer required, default getter and setter impliedvar initialized = 1 // has type Int, default getter and settervar是可变的可以有getter和setter方法,而val是不可变的不能有setter方法。形如:
val inferredType = 1 // has type Int and a default getter我们可以编写自定义的getter方法。形如:
val isEmpty: Boolean get() = this.size == 0自定义的setter方法。形如:
var stringRepresentation: String get() = this.toString() set(value) { setDataFromString(value) // parses the string and assigns values to other properties }如果你只是想改变getter和setter的可见,就可以不去定义它的函数体,形如:
var setterVisibility: String = "abc" // Initializer required, not a nullable type private set // the setter is private and has the default implementation
Backing Fields
var counter = 0 // the initializer value is written directly to the backing field set(value) { if (value >= 0) field = value//这里的field指代的是counter }
Backing Properties
你也可以将你的set方法返回给其它的属性,形如:private var _table: Map<String, Int>? = nullpublic val table: Map<String, Int> get() { if (_table == null) _table = HashMap() // Type parameters are inferred return _table ?: throw AssertionError("Set to null by another thread") }
更多相关文章
- 关于android的反射机制的用法
- android 通过经纬度获取地址信息
- Android开发常用代码
- Android监听按键返回键
- 安卓中实现两端对齐,中间fill_parent的方法
- Android绘制流程窗口启动流程分析(下)
- Android设置布局背景为白色的三种方法
- ormlite数据库存放sd卡,android卸载应用保留数据的方法
- Android第一行代码学习笔记六----手机多媒体