先来看一个简单的bean类Person
public class Person {
private final String name;
public Person(String name){
this.name = name;
}
public String getName() {
return name;
}
}
用工具把它转换为Kotlin
class Person(val name: String)
从java到kotlin的转换过程中,public修饰符消失了。在kotlin中,public是默认的可见性,可以省略。
2.2.1 属性
类的概念就是把数据和处理数据的代码封装成一个单一的实体。
在java中,数据存储在字段中,通常还是私有的,如果想让类的使用者访问到数据,得提供访问器方法:一个getter,可能还有一个setter。
在类中声明一个属性和声明变量一样:使用val和var关键字
class Person(val name: String, //只读属性:生成一个字段和一个简单的getter
var isMarried: Boolean) //可写属性:一个字段、一个getter和一个setter
在Kotlin中使用Person类
val person = Person("cyk",true) //调用构造方法不需要关键字 “new”
println(person.name) // 可以直接访问属性,但调用的是getter
在java中,使用
person.setMarried(false)
在Kotlin中,可以这样写
person.isMarried = false
你也可以自定义getter方法
class Person(val name: String,
var isMarried: Boolean){
fun getMyName() : String{
return "name:$name"
}
}
2.2.2 自定义访问器
怎么写一个属性访问器的自定义实现
假设你声明一个矩形,它能判断自己是否是正方形。不需要一个单独的字段来存储这个信息,因为可以检测矩形的长宽是否相等来判断:
class Rectangle(val height: Int, val width: Int) {
val isSquare:Boolean
get() { // 声明属性的getter
return height == width
}
}
属性isSquare不需要字段来保存它的值。它只有一个自定义的getter。它的值是每次访问属性的时候计算出来的。
注意,不需要使用带花括号的写法,也可以这样写 get() = height == width
》》》
val rectangle = Rectangle(5,6)
println(rectangle.isSquare)
参考《Kotlin实战》