IT七剑客 IT七剑客
首页
wresource
郭霖
孤寒者
IT邦德
沉默王二
老麦
stackoverflow
GitHub (opens new window)
首页
wresource
郭霖
孤寒者
IT邦德
沉默王二
老麦
stackoverflow
GitHub (opens new window)
  • 基础安卓文章

  • 服务器开发

  • 数据结构

  • Kotlin基础

    • Kotlin能否取代Java(Kotlin的历史以及现状)
    • what?函数的创建只要一行代码(Kotlin中的函数)
    • 你们知道幕后字段吗?(Kotlin中基本类的创建)
    • 一行解决单例模式(Kotlin中常用的类)
      • 一、对象声明
      • 二、伴生对象
      • 三、数据类
      • 四、密封类
  • wresource 安卓
  • Kotlin基础
wresource
2022-08-20
目录

一行解决单例模式(Kotlin中常用的类)

# 一、对象声明

指在object后面指定对象的名称,通过对象声明,只需要一行代码就实现了单例模式,这是Kotlin的内置语法支持,本质上还是一个封装

object single{
    //代码块
    //即实现了一个单例类
}
1
2
3
4

# 二、伴生对象

由于Kotlin没有static关键字,没有静态属性和静态方法,但如果有需求怎么办?没关系,Kotlin里面还有一些替代的方案甚至是逼近原生的

其实object关键字实现的单例类就已经相当于一个静态的类,里面的全部的属性和方法实质上已经全部被声明为静态的了,但有一个问题,如果我只想要将一个方法或者一个属性声明为静态的怎么办?

这时候就要考虑伴生对象了,使用companion object关键字

companion object{
    //需要声明静态的属性或者方法
}
1
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

如果怕自己忘记实现哪个功能,可以考虑使用密封类

今天的内容就结束了,是不是很简单

上次更新: 2023/04/05, 05:23:58
你们知道幕后字段吗?(Kotlin中基本类的创建)

← 你们知道幕后字段吗?(Kotlin中基本类的创建)

最近更新
01
How the creator of Angular is dehydrating the web (Ep 574)
06-07
02
For those who just don’t Git it (Ep 573)
06-07
03
Modern work requires attention. Constant alerts steal it
06-07
更多文章>
Theme by Vdoing | Copyright © 2022-2024 IT七剑客 | MIT License
  • 闽ICP备2021006579号-4
  • 闽公网安备 35012102500470号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式