Kotlin 学习(2)

属性和字段

1、声明属性

Kotlin中可以使用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 = ...
}

 

调用的时候与Java一样,通过变量名直接使用一个属性

fun copyAddress(address: Address): Address {
    val result = Address() // Kotlin不需要使用new关键字
    result.name = address.name
    result.street = address.street
    // ...
    return result
}

 

2、Getter和Setter

声明属性的完整语法如下,语法中的初始化语句,gettersetter都是可选的

var <propertyName>: <PropertyType> [= <property_initializer>]
    [<getter>]
    [<setter>]

如果属性类型可以从初始化语句或者类的成员函数中推断出来,那就可以省去类型,val不允许设置setter函数,因为它是只读的。

var allByDefault: Int? // 错误: 需要一个初始化语句, 默认实现了 getter 和 setter 方法
var initialized = 1 // 类型为 Int, 默认实现了 getter 和 setter
val simple: Int? // 类型为 Int ,默认实现 getter ,但必须在构造函数中初始化
val inferredType = 1 // 类型为 Int 类型,默认实现 getter

 

可以自定义访问器(getter)和自定义settersetter的参数名默认是value,也可以自定义

val isEmpty: Boolean
    get() = this.size == 0

var stringRepresentation: String
    get() = this.toString()
    set (value) {
        setDataFormString(value) // 格式化字符串,并且将值重新赋值给其他元素
    }

如果需要设置访问器的可见性或者设置注解,又不改变原来的实现,则可以设置一个不带函数的访问器

var setterVisibility: String = "abc" // 非空类型必须初始化
    private set // setter是私有的并且有默认的实现

var setterWithAnnotation: Any? = null // 设置为可空
    @Inject set // 用 Inject 注解 setter

 

posted @ 2018-05-08 16:25  ChHM  阅读(184)  评论(0编辑  收藏  举报