一行解决单例模式(Kotlin中常用的类)
# 一、对象声明
指在object后面指定对象的名称,通过对象声明,只需要一行代码就实现了单例模式,这是Kotlin的内置语法支持,本质上还是一个封装
object single{
//代码块
//即实现了一个单例类
}
1
2
3
4
2
3
4
# 二、伴生对象
由于Kotlin没有static关键字,没有静态属性和静态方法,但如果有需求怎么办?没关系,Kotlin里面还有一些替代的方案甚至是逼近原生的
其实object关键字实现的单例类就已经相当于一个静态的类,里面的全部的属性和方法实质上已经全部被声明为静态的了,但有一个问题,如果我只想要将一个方法或者一个属性声明为静态的怎么办?
这时候就要考虑伴生对象了,使用companion object关键字
companion object{
//需要声明静态的属性或者方法
}
1
2
3
2
3
# 三、数据类
data关键字修饰,一般用于储存数据相关的属性,这个也是默认自带getter和setter方法,非常好用,而且还自带hashCode()、equals()等方法
data class Dog(val name:String,val age:Int)
1
实际开发中用的非常多,一般用于json数据的解析之后储存的对象
# 四、密封类
这个类有点类似枚举类,经常和when一起配合使用,sealed关键字,包含子类,配合when使用时要么实现全部的子类,要么使用else
sealed class Test(var name:String)
class A(AName:String):Test(AName)
class B(BName:String):Test(BName)
fun getTestName(test: Test) = when(test){
is A -> "AName is ${test.name}"
is B -> "BName is ${test.name}"
//也可以去掉上面那一行,采用else
//else -> "BName is ${test.name}"
}
fun main(){
println(getTestName(A("hello")))
println(getTestName(B("hello")))
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
如果怕自己忘记实现哪个功能,可以考虑使用密封类
今天的内容就结束了,是不是很简单
上次更新: 2023/04/05, 05:23:58