Kotlin属性和字段与基本语法
Kotlin是一门与Swift类似的静态类型JVM语言,由JetBrains设计开发并开源。与Java相比,Kotlin的语法更简洁、更具表达性,而且提供了更多的特性,比如,高阶函数、操作符重载、字符串模板。它与Java高度可互操作,可以同时用在一个项目中。
Kotlin属性和字段
Declaring Properties 声明属性
Kotlin中使用var关键字声明可变属性,或者用val关键字声明只读属性,属性的类型在后面,变量名在签名,中间加冒号和空格。
public class Student {
public var name: String = ...
public var glass: String = ...
public var city: String = ...
public var state: String? = ...
public var grade: String = ...
}
只需要将成员变量定义成是 public 变量,编译器会自动生成 getter 和 setter 方法。所以上面的属性编译器默认添加了getter 和 setter 方法。
调用的时候与Java一样,通过变量名直接使用一个属性
fun recordStudent(student: Student): Student {
val result = Student() // there's no 'new' keyword in Kotlin
result.name = student.name
result.street = student.glass
// ...
return result
}
上面对属性的访问,并不是像Java里面一样,直接访问属性的本身,而是默认调用了getter 和 setter 方法。
Getter和Setter
语法中的初始化语句,getter和setter都是可选的,声明属性的完整语法如下:
var <propertyName>: <PropertyType> [= <property_initializer>]
[<getter>]
[<setter>]
其中initializer, getter 和 setter都是可选的。var是允许有getter 和 setter方法,如果变量是val声明的,它类似于Java中的final,所以如果以val声明就不允许有setter方法。
自定义访问器(getter)和自定义setter,setter的参数名默认是value,也可以自定义
val isClassSix: Boolean //val 类似于Java中的final
get() = this.class == 6
var stringRepresentation: String
get() = this.toString()
set (value) {
setDataFormString(value) // 格式化字符串,并且将值重新赋值给其他元素
}
对于属性,如果你想改变访问的可见性或者是对其进行注解,但是又不想改变它的默认实现,那么你就可以定义set和get但不进行实现。
var setterStudentName: String = "美国队长史爱民" // Initializer required, not a nullable type
private set // the setter is private and has the default implementation
var setterWithAnnotation: Any?
@Inject set // annotate the setter with Inject
备用字段(Backing Fields)
在上面例子中定义的Student类里面,属性的get和set方法里面使用了一个field,它是一个自动的返回字段,代表的就是属性。
Kotlin中的类并不允许使用字段,在自定义getter和setter的时候,可以使用field来起到局部变量的作用。
var counter = 0 //初始化值会直接写入备用字段