1.匿名内部类
Object可以实现,继承一个抽象类的同时,实现多个接口。
interface A {
fun funA()
} interface B {
fun funB()
} abstract class Man {
abstract fun findMan()
} fun main() {
// 这个匿名内部类,在继承了Man类的同时,还实现了A、B两个接口
val item = object : Man(), A, B{
override fun funA() {
// do something
}
override fun funB() {
// do something
}
override fun findMan() {
// do something
}
}
}

 

2.实现单例模式
object UserManager {
fun login() {}
}

 

3.伴生对象,实现静态方法访问的效果

class Person {
// 改动在这里
// ↓
companion object InnerSingleton {
@JvmStatic
fun foo() {}
}
} 实现工厂模式:
User.create("Tome")
// 私有的构造函数,外部无法调用
// ↓
class User private constructor(name: String) {
companion object {
@JvmStatic
fun create(name: String): User? {
// 统一检查,比如敏感词过滤
return User(name)
}
}
}

 

 
4.Object实现单例模式
object UserManager {
// 对外暴露的 user
val user by lazy { loadUser() } private fun loadUser(): User {
// 从网络或者数据库加载数据
return User.create("tom")
} fun login() {}
}
UserManager.user
只有访问的时候才加载用户 ====================================================================== 伴生对象Double check
class UserManager private constructor(name: String) {
companion object {
@Volatile private var INSTANCE: UserManager? = null fun getInstance(name: String): UserManager =
// 第一次判空
INSTANCE?: synchronized(this) {
// 第二次判空
INSTANCE?:UserManager(name).also { INSTANCE = it }
}
}
} // 使用
UserManager.getInstance("Tom") 第一次判空,没有进入同步资源,避免同步开销;
第二次判空,进入同步块,确保只有一个线程去创建该对象。第二次判空的原因是,
有可能存在其他线程创建了该对象。
=================================================================================================== 抽象类模板

  

 

kotlin--Object关键字的更多相关文章

  1. 【编程语言】Kotlin之object关键字

    在一个体重秤项目里面使用Kotlin开发,考虑到项目比较小型轻量,所以和团队申请决定使用Kotlin开发,以此熟悉和尝试一下Kotlin. 首先使用Kotlin之后,发现能和Java很好的兼容一起,开 ...

  2. Android Parsing between JSON and Kotlin Object with Google Gson Library

    Parsing between JSON and Kotlin Object with Google Gson Library dependencies { ... implementation 'c ...

  3. Kotlin中的object 与companion object的区别

    之前写了一篇Kotlin中常量和静态方法的文章,最近有人提出一个问题,在companion object中调用外部的成员变量会调用不到,这才意识到问题,本篇文章会带着这个疑问来解决问题. 一. obj ...

  4. delphi的几个特别关键字 object absolute

    1.object关键字相当于C++中的struct, record定义个结构体只能定义数据,而object可以定义方法,默认都是public的.   代码示例如下: TTest = record na ...

  5. Android平台的Swift—Kotlin

    WeTest 导读 Kotlin 已经出来较长一段时间了,有些同学已经对Kotlin进行了深入的学习,甚至已经运用到了自己的项目当中,但是还有较多同学可能只是听过Kotlin或简单了解过,这篇文章的目 ...

  6. 写给Android开发者的Kotlin入门

    写给Android开发者的Kotlin入门 转 https://www.jianshu.com/p/bb53cba6c8f4 Google在今年的IO大会上宣布,将Android开发的官方语言更换为K ...

  7. Kotlin 对象表达式和对象声明

    Kotlin 用对象表达式和对象声明来实现创建一个对某个类做了轻微改动的类的对象,且不需要去声明一个新的子类. 对象表达式 通过对象表达式实现一个匿名内部类的对象用于方法的参数中: window.ad ...

  8. Kotlin基础(三)类、对象和接口

    类.对象和接口 一.定义类的继承结构 一)Kotlin中的接口 Kotlin的接口与Java8中相似,它们可以包含抽象方法的定义以及非抽象方法的实现,但它们不能包含任何状态. interface Cl ...

  9. Kotlin(一)

    Kotlin(一) 写在前面: 参考资料: <Kotlin官方文档><Kotlin for Android 开源中文版> 准备工作: Android-Studio2.x:添加K ...

  10. Kotlin入门(18)利用单例对象获取时间

    前面介绍了,使用扩展函数可以很方便地扩充数组Array的处理功能,例如交换两个数组元素.求数组的最大元素等等.那么除了数组之外,日期和时间的相关操作,也是很常见的,比如获取当前日期,获取当前时间.获取 ...

随机推荐

  1. Verdi基础-01

    Verdi使用目标 生成fsdb波形 查看fsdb波形 追踪RTL代码 目录 Verdi历史 生成fsdb波形 三个变量&&三个命令 变量PATH LD_LIBRARY_PATH so ...

  2. 【SHELL】查找包含指定字符串的目录、在找出的路径中找出指定格式的文件、并统计出数量

    查找包含字符串"skull"的目录.在找出的路径中找出格式".c/.cpp/.h"的文件.并统计出数量 find . -path ./out -prune -o ...

  3. 选择DOM中除一个元素以外的所有元素[Jquery]

    $(function(){ $('body > *').not('#myDiv') .on('mouseover', function(){ //... }) .on('click', func ...

  4. [转帖]46岁加入谷歌,51岁发明Go,他的编程原则影响了一大批程序员!

    https://www.zhihu.com/tardis/zm/art/551945410?source_id=1005 今年3月,万众瞩目的Go 1.18版本发布,Go终于开始支持泛型了!该版本不仅 ...

  5. [转帖]容器化 TCP Socket 缓存、接收窗口参数

    https://blog.mygraphql.com/zh/notes/low-tec/network/tcp-mem/#rmem_default 最近需要支持一个单 POD 的 TCP 连接数上 1 ...

  6. [转帖]Shell编程之正则表达式与文本处理器(grep、sort、uniq、tr、cut)

    目录 正则表达式概念 正则表达式的作用 元字符 grep命令在文本中查找指定的字符串 sort命令排序 uniq命令快捷去重 tr命令替换.压缩和删除 cut命令快速裁剪命令 expr substr ...

  7. [转帖]PyCharm无法安装第三方模块,一直提示 updating list:time out 解决办法

    Pycharm无法安装第三方模块解决办法: 1.打开pycharm的项目的venv文件夹 2.打开文件夹目录中的pyvenv文件 3.将文件中的include-system-site-packages ...

  8. 下载 ingres-nginx

    https://quay.io/repository/kubernetes-ingress-controller/nginx-ingress-controller-arm64?tag=latest&a ...

  9. Python笔记四之协程

    本文首发于公众号:Hunter后端 原文链接:Python笔记四之协程 协程是一种运行在单线程下的并发编程模型,它的特点是能够在一个线程内实现多个任务的并发操作,通过在执行任务时主动让出执行权,让其他 ...

  10. springboot整合nacos的入门Demo

    Nacos介绍 Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现.配置管理和服务 ...