java 变量单例_Java静态变量的用法:伪单例
这几天遇到一个问题,一个Service里有一个map,但是这个Service有别的继承,于是每一个Service都会创建一个map,但是这个map应该是公用的,于是就有问题了。。。(按结构说Service里是不应该有map存在的,结果设计有问题,但是结构不影响研究)
特殊的解决方式:把此map改为static即可,因为一个类的静态变量在不同实例中是共用的,所以这样便实现了map的单例模式。
(标准解决方案是放在一个单例的manager中,以便公共调用,这里偷懒。。。)
还有标准单例,一个private static的本类实例,一个public static的获取本类实例的方法,关键的在于构造方法是私有的。(没有构造时默认为共有构造,所以一定要重写构造方法)
public classRateManager {private static RateManager singleInstance = newRateManager();public staticRateManager getInstance() {returnsingleInstance;
}privateRateManager(){
BillRateService billRateService= ApplicationHelper.getApplicationContext().getBean(BillRateService.class);this.agentRateMap =billRateService.getSipuserRateMap();this.groupRateMap =billRateService.getSkillGroupRateMap();
}private Map agentRateMap = new HashMap<>();private Map groupRateMap = new HashMap<>();public voidaddAgent(String key, BillRate rate) {this.agentRateMap.put(key, rate);
}public voidaddGroup(String key, BillRate rate) {this.groupRateMap.put(key, rate);
}public voiddeleteAgent(String key, BillRate rate) {this.agentRateMap.remove(key);
}public voiddeleteGroup(String key, BillRate rate) {this.groupRateMap.remove(key);
}public voidrefresh() {
BillRateService billRateService= ApplicationHelper.getApplicationContext().getBean(BillRateService.class);this.agentRateMap =billRateService.getSipuserRateMap();this.groupRateMap =billRateService.getSkillGroupRateMap();
}publicBillRate getAgentRate(String agentName) {
BillRate rate= this.agentRateMap.get(agentName);if (rate == null)
rate= this.agentRateMap.get(null);returnrate;
}publicBillRate getGroupRate(String queueId) {
BillRate rate= this.groupRateMap.get(queueId);if (rate == null)
rate= this.groupRateMap.get(null);returnrate;
}
}
这样还有一个好处就是,可以在构造方法时初始化一些东西。因为静态方法是第一次调用的时候才会初始化的,所以第一次调用的时候才会走new,成功在启动后初始化。
java 变量单例_Java静态变量的用法:伪单例相关推荐
- java static变量何时初始化_Java 静态变量何时初始化?
小编典典 从请参阅Java静态变量方法: 它是一个属于类而不属于对象(实例)的变量 静态变量在执行开始时仅初始化一次.在初始化任何实例变量之前,将首先初始化这些变量 该类的所有实例共享一个副本 静态变 ...
- java静态局部变量_java中成员变量,局部变量,静态变量的辨析
转自百度:https://baijiahao.baidu.com/s?id=1625360816541592483&wfr=spider&for=pc 1.java中成员变量,局部变量 ...
- java中类变量局部量_java入门---变量类型类变量局部变量实例变量静态变量
在Java语言中,所有的变量在使用前必须声明.声明变量的基本格式如下: typeidentifier[= value][, identifier[= value]...]; 格式说明:type为Jav ...
- Java 静态类、静态方法和静态变量
转载自Java 静态类.静态方法和静态变量 Java 静态类.静态方法和静态变量 static 是Java中的一个关键字,我们不能声明普通外层类或者包为静态的.static用于下面四种情况. 1.静态 ...
- Java static(一) - 静态变量
1.JVM运行时数据区域 java堆存放所有的对象实例,被所有线程共享. 方法区(永久代)与Java堆中一样,是各个线程共享都内存区域,它用于存储已经被虚拟机加载类的信息.常量.静态变量(static ...
- VBA学习(一)启用VBA、变量、常量、静态变量、字符串拼接、循环语句与判断语句
目录索引 在Excel中启用VBA 变量的强制声明 静态变量 静态变量值消失的情况 常量 循环语句 FOR循环 Do While循环 Do Until循环 Do--Loop While循环 IF判断语 ...
- 类变量、成员变量、实例变量、局部变量、静态变量、全局变量 的解释。
类体由2部分构成: 一部分是变量的定义; 一部分是方法的定义(一个类中可以有多个方法) 在变量定义部分定义的变量叫做类的成员变量,成员变量在整个类中都有效. (全局变量应该是成员变量的俗称) 在方法体 ...
- python中静态变量_Python中的静态变量和方法
python中静态变量 Defining static variable and method is a common programming concept and is widely used i ...
- java 静态变量声明_java静态变量怎么声明?
展开全部 个人的总结 1 静态变量e69da5e6ba9062616964757a686964616f31333337616564只有一份被类的所有实例共享 2 静态变量的声明在编译时已经明确了内存的 ...
最新文章
- 讲解AI三大方向的模型与算法!
- CNCF宣布containerd毕业
- 『数据中心』降低PUE值4种方法
- OSPF网络类型详解
- -webkit-border-radius和-moz-border-radius(转)
- 【Android】自带Theme
- 点读笔客户端_新手妈妈如何选购点读笔
- 这家简历大数据公司被“一锅端” 或因私自抓取用户简历:曾获李开复投资
- Win10安装GPU版tensorflow和keras
- 《Gabor feature based sparse representation for face recognition with gabor occlusion dictionary》
- stm32是以c语言来编程吗,stm32用什么语言编程
- Webpack 学习笔记
- Vijos P1199核弹危机
- VB6.0视频教程78集,入门视频教程,基础够了(基础篇)
- ubuntu18.04在状态栏显示网速
- 苹果开发 笔记(69)SVProgressHUD
- java并发编程——创建线程之Thread 和 Runnable
- 利用pygame实现大鱼吃小鱼游戏
- 郑州大学计算机翟雨轩,郑州大学文件-20210331220732.doc-原创力文档
- Win10 64bit 下 Oracle 11g的下载与安装+PLSQL的安装 (超级详细)
热门文章
- 【转】系统管理类DOS命令汇总
- 苯环的神经网络C6H6
- C语言拾零(to be continued)
- STM32 基础系列教程 12 – ADC 中断
- 【工具】更新arduino最新esp8266库离线安装包3.0.1、ESP32库离线安装包1.0.6,库编译报错解决方法...
- FPGA篇(九)关于ASCII码
- 基于神经网络的控制器设计与仿真
- 基于FPGA的gardner同步环设计
- FreeRTOS 查询任务 剩余的栈空间的 方法
- JS(JavaScript)的初了解6(更新中···)