前言
我们都是 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
希望你今天学到了一些新东西。