当前位置:网站首页>【Android Kotlin】Property、Getter 和 Setter
【Android Kotlin】Property、Getter 和 Setter
2022-07-24 00:06:00 【程序员小何SS】
前言
我们都是 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
希望你今天学到了一些新东西。
边栏推荐
- Windows软件:如何安装Mysql5.7并配置环境变量
- PushGateway+Prometheus+Grafana构建Flink实时监控
- 太空射击第08课: 改进的碰撞
- DGS's mutations
- 单目标追踪——【相关滤波】MOSSE:Visual Object Tracking using Adaptive Correlation Filters
- Operating system not found solution after importing ISO into virtual machine
- 【译】Go RPC 入门:Hello World
- .NET下发同Outlook邮件格式以及表格的拼接
- Code generation of DGS
- Tree DP
猜你喜欢

kubernetes error

【译】Go RPC 入门:Hello World

Nacos

一改测试步骤代码就全写?为什么不试试用 Yaml实现数据驱动?

Scheme for importing XMIND use cases into tapd (with code)

Pushgateway+prometheus+grafana build Flink real-time monitoring

Sentinel link mode flow control failure solution

DGS first acquaintance
![[ssm] joint debugging of front and rear protocols ①](/img/47/c1016c5c5e4ffc0d6cc93cf50d52df.png)
[ssm] joint debugging of front and rear protocols ①

Windows software: how to install mysql5.7 and configure environment variables
随机推荐
尝试新的方法
QT | set part size sizehint, minimumsizehint, sizepolicy, stretch factor
After openfeign sets circuitbreaker=true, feign's readtimeout expires
Sum of submatrix
C语言之字符串函数一
【译】Go RPC 入门:Hello World
[three-year interview and five-year simulation] Dugu Jiujian secret script of Algorithm Engineer (first six style summary) V1 version
The title of solo article will filter out some tags
太空射击第08课: 改进的碰撞
Qt创建窗口被阻塞不能及时显示的问题
idea无法切换成中文
kubernetes error
Super simple training of force deduction and problem brushing
Is it safe to find an account manager to open a fund account online??
ESP8266————AT指令+网络透传
Data driven excel reading and writing
kubernetes error
进步成长的快乐
As a programmer, is there anything you want to say to the newcomer?
单目标追踪——【相关滤波】MOSSE:Visual Object Tracking using Adaptive Correlation Filters