大师网-带你快速走向大师之路 解决你在学习过程中的疑惑,带你快速进入大师之门。节省时间,提升效率

类和属性

创建

首先我们先回忆一下Java中如何创建实体类,我们创建一个学生类,其中有两个私有属性,姓名name和年龄age,并且我们为其提供构造器和访问器,我们通过构造方法来创建实体类,通过getter和setter方法来进行属性的访问和修改,同时可以在setter方法里面做一些额外的逻辑,比如对数据的验证.

public class Student {
    private String name;
    private int age;


    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

接下来我们用Kotlin再编写一个相同的Student类.

class Student(var name: String, var age: Int)

在这段代码中,我们只是使用var关键字声明了两个属性,仅此而已.
可能就有人会产生疑问了,我们没有声明他的访问器方法,要如何访问和修改这个属性呢???
其实在kotlin中,我们声明属性的同时也对应的声明了相应的访问器来进行数据的访问和修改操作.
那么此时我们就需要注意一点了,在声明属性时我们所使用的关键字是具有不同功能的,var关键字表示该属性是可变的(可读可写),val则表示不可变的(只读).也就代表使用var会同时生成getter和setter方法,而使用val则只会生成getter方法.
注:如有特殊需要,则可以声明自定义的访问器方法.

使用

上面描述了如何在java和kotlin中创建类,接来下我们该使用它们了.

访问
  # java
   Student student = new Student("老七", 18);
   System.out.println(student.getName());      >>>老七
   System.out.println(student.getAge());       >>>18
  # kotlin
   val student: Student = Student("七叔阿", 99)
   println(student.name)                        >>>七叔阿
   println(student.age)                         >>>99

修改
  # java
   student.setName("777阿");
   student.setAge(25);
 # kotlin
   student.name = "七叔同学"
   student.age = 18

对比可以发现,在kotlin中我们不需要在调用getter方法访问属性值,修改时也不用再调用setter方法.

自定义访问器

上面我们说过,当有特殊需求的时候,我们可以自己定义访问器的方法,接下来我们就看看如果来自定义kotlin的访问器.

声明
class Student(var name: String, var age: Int) {
    val isAdult: Boolean = age > 18          判断是否是成年人(大于18)
    val isChild: Boolean                     判断是否是个小宝贝(1到4之间 包含1和4)
        get() {
          return  age in 1..4
        }
}
使用
    println(student.isAdult)          
    println(student.isChild)

属性isAdult和isChlid不需要字段来保存值,并且有一个自定义实现的getter.值为每次访问该属性时进行计算的.
可以使用带有"{}"包裹的代码块也可以直接使用"="来返回结果.