kotlin单例

news2024/11/20 12:24:12

两种方式都可以 更推荐方式一 

方式一
class TraceDataManager private constructor() {
    companion object {
        private val TAG = TraceDataManager::class.java.simpleName

        @Volatile
        private var instance: TraceDataManager? = null
        fun getInstance(): TraceDataManager {
            return instance ?: synchronized(this) {
                instance ?: TraceDataManager()
            }
        }
    }

    fun setCurrentActivity(activity: Activity?) {
        sCurrentActivityWeakRef = WeakReference<Activity>(activity)
    }
}

调用示例
TraceDataManager.getInstance().setCurrentActivity(activity)


方式二 饿汉式 object 方式(object 关键字就是修饰单例的)
object MyActivityManager {
    private val TAG = MyActivityManager::class.java.simpleName
    fun setCurrentActivity(activity: Activity?) {
        sCurrentActivityWeakRef = WeakReference<Activity>(activity)
    }
}

调用示例
MyActivityManager.setCurrentActivity(activity)

有关Kotlin Companion 我们需要了解到的几个知识点 - 知乎

companion 的作用就是修饰 object的  

可以匿名 不写类名 

可以在companion 里面写变量相当于 这个变量相当于 java外部类 的静态变量

 

class TopLevelClass {

可以不写类名  匿名单例类
//省略了伴生对象的名称
    companion object {
        fun doSomeStuff(){
            ...
        }
    }

写了类名 FakeCompanion
//没有省略了伴生对象的名称
    object FakeCompanion {
        fun doOtherStuff() {
            ...
        }
    }
}

fun testCompanion() {
    TopLevelClass.doSomeStuff()
    TopLevelClass.Companion.doSomeStuff()
    TopLevelClass.FakeCompanion.doOtherStuff()
}
如果在Java 中写同样的测试代码,代码稍有不同:

public void testCompanion() {
    TopLevelClass.Companion.doSomeStuff();
    TopLevelClass.FakeCompanion.INSTANCE.doOtherStuff();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/694021.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

web入门——springboot、HTTP协议

这里写目录标题 springboot入门 http协议概念以及特点请求协议格式请求头的一些含义解释 响应协议格式具体的状态码以及响应头的一些含义解释 协议解析 springboot 入门 http协议 概念以及特点 请求协议 格式 包括请求行、请求头、请求体三部分&#xff08;请求体是pos请求方…

HTTP代理——提高网页抓取效率的秘诀

在日益数字化的时代&#xff0c;网页抓取对于各行各业的数据获取变得越来越重要。而在这个过程中&#xff0c;HTTP代理服务器成为了提高网页抓取效率的秘密武器。 为什么这么说呢&#xff0c;这要从&#xff0c;HTTP代理的功能来说。 1. 缓存机制 代理服务器可以缓存已经访问…

考研算法31天:归并排序 【归并排序,分治】

算法介绍 归并算法其过程分为三步&#xff1a; 1.分&#xff1a;递归到最下面 2.治&#xff1a;两个元素之间排序。 3。归&#xff1a;递归到最下层然后返回&#xff0c;从两个元素变成四个元素再排序。 如下图所示&#xff1a; 动态图如下&#xff1a; 算法题目 算法ac代…

Selenium教程__使用Select类对象处理下拉框(15)

select标签的下拉框可以使用selenium的 Select模拟下拉框选择操作。 Select需要导入才能使用&#xff0c;导入路径如下 from selenium.webdriver.support.ui import Select 下面以hao123(https://www.hao123.com) 演示下拉框操作 演示代码如下 import time from selenium i…

状态压缩DP—蒙德里安的梦想

题目链接&#xff1a;AcWing 291. 蒙德里安的梦想 问题描述 分析 这是一道经典的状态压缩DP问题&#xff0c;横着或者竖着排列1*2的方块 可以发现&#xff0c;横(竖)着的合法排列方案数就是问题的解&#xff0c;因为横(竖)着的合法排列后竖(横)着的只有一种排列方法, 这里我们…

ChatGPT是否可以写出一篇论文

利用AI反哺教育和学术&#xff0c;在训练它写论文的过程中你学到的&#xff0c;比你自己写一篇论文学到的更多。让工具回归工具&#xff0c;让我们变成更好的我们&#xff01; 第一步&#xff1a;现象确认 第二步&#xff1a;学术概念化 第三步&#xff1a;定位优质的学术资源 …

chatgpt赋能python:Python调用主函数语句

Python调用主函数语句 Python是一种高级编程语言&#xff0c;语法简单&#xff0c;易于学习和使用。在Python程序中&#xff0c;主函数是程序的入口&#xff0c;是程序的核心。本文将介绍Python调用主函数语句的相关知识。 什么是主函数 在Python程序中&#xff0c;主函数也…

Git 配置ssh验证 签名

首先你得装了git&#xff0c;linux 自带的&#xff0c;Windows自己下载配置一下。 注意 Windows下要用gitbash输入命令行&#xff0c;如果是Linux 就在默认命令行输入命令即可 大致思路如下&#xff08;不一定对&#xff0c;因为有段时间没弄了&#xff09;&#xff1a; 1. 生…

【软考网络管理员】2023年软考网管初级常见知识考点(27)- 多媒体基础知识

涉及知识点 A/D转换&#xff0c;常见音频格式&#xff0c;容量计算&#xff0c;图形图像格式&#xff0c;动画和视频&#xff0c;常见视频格式&#xff0c;媒体的种类&#xff0c;软考网络管理员常考知识点&#xff0c;软考网络管理员网络安全&#xff0c;网络管理员考点汇总。…

能存会算,XHERE+XEDP打造泸县第二人民医院稳固数据底座

泸县第二人民医院采用 XSKY星辰天合支持存算分离的融合计算管理平台 XHERE&#xff0c;对医院底层 IT 架构进行统一规划&#xff0c;满足集成平台建设要求&#xff0c;并完成互联互通成熟度符合性建设。 医院业务的复杂性促成了医院信息系统的多样性&#xff0c;信息集成平台为…

【数据结构与算法】6、栈(Stack)的实现、LeetCode:有效的括号

目录 一、栈&#xff08;Stack&#xff09;二、利用 ArrayList 实现栈三、LeetCode: 有效的括号(1) 思路(2) 代码① 看完思路后自己实现的代码② 老师的代码③ 利用 HashMap 简化代码 一、栈&#xff08;Stack&#xff09; &#x1f331; 栈是一种特殊的线性表&#xff0c;只能…

如何用Python搭建监控平台

监控和运维&#xff0c;是互联网工业链上非常重要的一环。监控的目的就是防患于未然。通过监控&#xff0c;我们能够及时了解到企业网络的运行状态。一旦出现安全隐患&#xff0c;你就可以及时预警&#xff0c;或者是以其他方式通知运维人员&#xff0c;让运维监控人员有时间处…

Modelsim仿真步骤

Modelsim仿真步骤 1.将文件全部编译成功。 2.点击Simulate->Start Simulation… 3.点击后出现如下图所示窗口。 &#xff08;1&#xff09;在work里面找到testbench文件添加&#xff1b; &#xff08;2&#xff09;把Enable optimization前面的“√”去掉&#xff1b; …

找到优秀的软件外包开发公司

当企业需要找外包开发公司时会发现市场上的外包公司非常多&#xff0c;而找到合适自己的软件公司对于一个软件项目的成功至关重要&#xff0c;那怎么选择适合自己的公司呢&#xff1f;今天和大家分享这方面的知识&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&…

开源SCRM营销平台MarketGo-短链获客

一、概述 企业微信为私域运营上线了新的获客工具-获客助手。主要应用的场景是获取新客户&#xff0c;优点是不需要像二维码一样需要扫码或者长按识别&#xff0c;直接点击短连接一键添加。目前此功能还是在内测阶段。 应用的场景&#xff1a;获客的短信&#xff0c;咨询客服等…

LeetCode刷题 | 198. 打家劫舍、337. 打家劫舍 III

198. 打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…

【vitepress】vitepress使用不完全指南

前言 wue3文档就是用vitepress搭建的,vitepress作为vuepress的精神替代还是非常指定学习的。vitepess只要网项目中放markdown文件就能生成精美的博客网站也算还是比较容易上手的。 项目搭建(参考) 创建项目 pnpm create vitepress # 写上项目名字即可项目启动 # 安装依赖 pn…

基于图的数据关联论文《CLIPPER: A Graph-Theoretic Framework for Robust Data Association》学习

一、基本概念 基本思想是将数据关联问题转换为图&#xff0c;计算最稠密的全连接子图&#xff0c;具体描述有点拗口&#xff1a; 1、图的节点是什么 假设有两组数据setA和setB&#xff0c;setA有a,b,c,d,e这几个点&#xff0c;setB里面有i,j,k,l这个几个点。 如果认为setA中…

【设计模式】模板方法与策略模式的结合使用

文章目录 1. 概述1.1.简述模板方法 2.模板方法实现2.1.简单实现2.2.在SpringBoot中的实现 3.模板方法与策略模式的结合使用3.1.代码实现 4.总结 1. 概述 模板方法是一种非常简单的设计模式&#xff0c;只要能够理解面向对象中的继承与多态就能够理解这种设计模式&#xff0c;我…

安卓布局详解:探索各种布局方式

文章目录 前言一、线性布局&#xff08;LinearLayout&#xff09;二、相对布局&#xff08;RelativeLayout&#xff09;三、帧布局&#xff08;FrameLayout&#xff09;四、表格布局&#xff08;TableLayout&#xff09;五、约束布局&#xff08;ConstraintLayout&#xff09;六…