【Android Kotlin】Property、Getter 和 Setter

27 篇文章 0 订阅
5 篇文章 0 订阅

前言

我们都是 Android 开发人员,我们都开始使用 OOP 概念在 Java 中开发 Android 应用程序。但是在引入 Kotlin 语言之后,我们都开始转向 Kotlin 语言,因为它现在是 Android 应用程序开发的推荐语言,在这个转型阶段,我们都注意到这些语言之间存在很多差异。就像在 Java 中一样,我们将变量声明为私有,在声明之后,我们为同一个变量创建一个 getter 和一个 setter 方法,这些方法被公开。但是当我们迁移到 Kotlin 时,整个过程被简化为仅一行代码。

在这篇文章中,我们将了解 Kotlin 中的 Property、Getter 和 Setter。但是在开始写文章之前,脸上挂着微笑不是因为你只需要为 Kotlin 中的 Getter 和 Setter 编写一行代码,而是因为你今天要学习一些新东西 😃

Property

Property是在类内部但在方法外部声明的变量(更准确地说是成员变量)。Kotlin 属性可以使用“var”关键字声明为可变的,也可以使用“val”关键字声明为不可变的。
以下是属性声明的语法:

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

在这里,Property初始化器、getter 和 setter 是可选的。以下是相同的示例:

fun main(args : Array) {
    val name: String = "MindOrks"
    var members: Int = 5000
    members = 7000 // In can be assigned any number of times
    name = "New Name" // It can not be assigned again
}

默认情况下,Kotlin 中的所有属性和函数都是public。但是在private和protected的情况下,您必须明确添加它。此外,默认情况下Kotlin 中的所有属性都是最终的。但是,如果我想将一个变量声明为私有,然后将它的 getter 和 setter 添加为公有呢?让我们来看看。

Getter 和 Setter

顾名思义,Getter 用于获取变量的值,而 Setter 用于设置任何变量的值。请不要鼓掌:)让我们举个例子。以下是 Getter 和 Setter 的 Java 代码:

class Community {
 
    //private variable
    private String name;

    //getter for name
    public getName() {
        return name;
    }
    
    //setter for name
    public setName(String name) {
        this.name = name;
    }
    
}

在这里,我们有两个名为name和roll的私有变量。除此之外,我们还为这些变量提供了 Getter 和 Setter。如果我们在 Kotlin 中编写相同的代码,那么代码将是:

class Community {
    var name: String = "MindOrks"
}

而已。相信我!这是 Kotlin 中 getter 和 setter 的代码。Getter 和 setter 是在代码中自动生成的。因此,它们是在我们声明属性时自动创建的。上述 Kotlin 代码的 Getter 和 Setter 等效代码可以写成:

class Community {
    var name: String = "MindOrks"
        get() = field                     // getter
        set(value) { field = value }      // setter
}

那么,当你可以在一行中做同样的事情时,为什么还要写 2-3 行代码呢?
让我们再看一些例子。在上面的类中,即在Community 类中,再添加两个私有变量。

class Community {

    //private variable
    private String name;
    private String startingDate;
    private String desc; //description of community

    //getter for desc
    public getDesc() {
        return name + " " + startingDate;
    }

    //setter for name
    public setDesc(String desc) {
        String descArray[] = desc.split(" ");
        name = descArray[0];
        startingDate = descArray[1];
    }

}

在上面的代码中,getter 方法返回带有空格的社区描述,setter 用于将描述分成两部分,即社区名称和社区开始日期。等效的 Kotlin 代码将是:

private lateinit var name: String
private lateinit var startingDate: String
var desc: String
    get() = name + " " + startingDate
    set(value) {
        val descArray = value.split(" ".toRegex())
        name = descArray[0]
        startingDate = descArray[1]
    }

在 Kotlin 中是不是很容易?
我们可以通过在基类中将变量定义为open来覆盖扩展类中的 getter 或 setter,然后在扩展类中使用override关键字。

//Base class
open var money: Int = 0
    get() = 10000

//Extending class
override var money: Int = 0
    get()= 20000

希望你今天学到了一些新东西。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值