首页 > 其他分享 >kotlin--Object关键字

kotlin--Object关键字

时间:2024-02-19 19:56:47浏览次数:21  
标签:object name -- kotlin Object UserManager 判空 User fun

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")

第一次判空,没有进入同步资源,避免同步开销;
第二次判空,进入同步块,确保只有一个线程去创建该对象。第二次判空的原因是,
有可能存在其他线程创建了该对象。
===================================================================================================

抽象类模板

  

 

 

标签:object,name,--,kotlin,Object,UserManager,判空,User,fun
From: https://www.cnblogs.com/ttylinux/p/18021835

相关文章

  • 记一次oracle单表改分区表 一波三折
    业务上要把单表还差分区表SQL>@seggwx.aopenSEG_MBOWNERSEGMENT_NAMESEG_PART_NAMESEGMENT_TYPESEG_TABLESPACE_NAMEBLOCKSHDRFILHDRBLK------------------------------------------------------------------------------------------------------------------......
  • 磐维2.0 之pg_stat_statements插件
    目录一、概念描述二、安装插件三、pg_stat_statements视图四、pg_stat_statements相关参数五、测试验证一、概念描述pg_stat_statements是pg的一个扩展插件,通常用于统计数据库的资源开销,分析TOPSQL,找出慢查询。二、安装插件testdb=#testdb=#createextensionpg_stat_sta......
  • 《程序是怎样跑起来的》第五章
    程序要先存在存储器中,才能被运行这种方式成为存储程序方式。存储器包括内存和磁盘。而存储在磁盘的顺序要先加载到内存才能运行。磁盘缓存是一块内存空间,用来临时存放从磁盘中读取的数据,当下次访问相同的数据时,就可以直接访问磁盘缓存的数据,从而提高数据访问速度。缓存的设计原......
  • 摘抄
     HBuilderX对vue的支持有多强?分类:HBuilderVueHBuilderX中使用vue,如果是打开vue文件,会自动挂载vue语法库。如果是HTML文件里引用vue框架,需要点右下角的语法提示库,选择vue语法库。我们更推荐开发者使用vue单文件规范,直接打开vue文件。注意:如果文件不在项目下,......
  • 【Flink入门修炼】1-4 Flink 核心概念与架构
    前面几篇文章带大家了解了Flink是什么、能做什么,本篇将带大家了解Flink究竟是如何完成这些的,Flink本身架构是什么样的,让大家先对Flink有整体认知,便于后期理解。一、Flink组件栈Flink是一个分层架构的系统,每一层所包含的组件都提供了特定的抽象,用来服务于上层组件。Flink......
  • Mogdb / opengauss 用户密码错误,用户被锁
    问题概述xxx客户新上一套opengauss数据库,在测试中程序里用户的密码配置错误,导致用户被锁解决方案1、跟oracle语法一样alteruserxxxaccountunlock;2、需要等一天后自动解锁模拟问题因没有opengauss的环境,测试环境选择Mogdb1、准备测试环境,输入错误的密码。如下[omm@......
  • 单个表空间文件个数达到上限 ORA-01686
    问题概述因在oracle数据库表空间管理中的时候报ORA-01686:max#files(1023)reachedforthetablespaceGPRSSQL>altertablespaceGPRSadddatafile'+DATADG'size60G;altertablespaceGPRSadddatafile'+DATADG'size60G*ERRORatline1:ORA-01686......
  • MogDB 学习笔记之 --exchange partition
    概念描述MogDB提供了从分区交换的功能,如单表转化到一个分区中基本语法:ALTERTABLE...EXCHANGEPARTITION数据库版本测试验证1、环境准备miao=>selectversion();version--------------------------------------------------------------------------------------------......
  • Qt QTabWidget显示隐藏tab页方法(setTabVisible)
    QT中QTabWidget在Qt5.15引入了setTabVisible方法低版本实现方法1//TabWidget2classTabWidget:publicQTabWidget3{4Q_OBJECT56public:78classwidgetTab{9public:10QStringtext;11QWidget*w......
  • MogDB 学习笔记之 -- truncate 属于dml语句
    概念描述验证create语句、alter语句、truncate语句、drop语句是属于ddl还是dml测试验证1、环境准备修改log_statement参数miao=#showlog_statement;log_statement---------------none(1row)miao=#ALTERDATABASEmiaoSETlog_statementTOddl;ALTERDATABA......