2.2 类和属性

  先来看一个简单的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实战》

猜你喜欢

转载自blog.csdn.net/cai784921129/article/details/81317598
2.2