这几天遇到一个问题,一个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静态变量的用法:伪单例相关推荐

  1. java static变量何时初始化_Java 静态变量何时初始化?

    小编典典 从请参阅Java静态变量方法: 它是一个属于类而不属于对象(实例)的变量 静态变量在执行开始时仅初始化一次.在初始化任何实例变量之前,将首先初始化这些变量 该类的所有实例共享一个副本 静态变 ...

  2. java静态局部变量_java中成员变量,局部变量,静态变量的辨析

    转自百度:https://baijiahao.baidu.com/s?id=1625360816541592483&wfr=spider&for=pc 1.java中成员变量,局部变量 ...

  3. java中类变量局部量_java入门---变量类型类变量局部变量实例变量静态变量

    在Java语言中,所有的变量在使用前必须声明.声明变量的基本格式如下: typeidentifier[= value][, identifier[= value]...]; 格式说明:type为Jav ...

  4. Java 静态类、静态方法和静态变量

    转载自Java 静态类.静态方法和静态变量 Java 静态类.静态方法和静态变量 static 是Java中的一个关键字,我们不能声明普通外层类或者包为静态的.static用于下面四种情况. 1.静态 ...

  5. Java static(一) - 静态变量

    1.JVM运行时数据区域 java堆存放所有的对象实例,被所有线程共享. 方法区(永久代)与Java堆中一样,是各个线程共享都内存区域,它用于存储已经被虚拟机加载类的信息.常量.静态变量(static ...

  6. VBA学习(一)启用VBA、变量、常量、静态变量、字符串拼接、循环语句与判断语句

    目录索引 在Excel中启用VBA 变量的强制声明 静态变量 静态变量值消失的情况 常量 循环语句 FOR循环 Do While循环 Do Until循环 Do--Loop While循环 IF判断语 ...

  7. 类变量、成员变量、实例变量、局部变量、静态变量、全局变量 的解释。

    类体由2部分构成: 一部分是变量的定义; 一部分是方法的定义(一个类中可以有多个方法) 在变量定义部分定义的变量叫做类的成员变量,成员变量在整个类中都有效. (全局变量应该是成员变量的俗称) 在方法体 ...

  8. python中静态变量_Python中的静态变量和方法

    python中静态变量 Defining static variable and method is a common programming concept and is widely used i ...

  9. java 静态变量声明_java静态变量怎么声明?

    展开全部 个人的总结 1 静态变量e69da5e6ba9062616964757a686964616f31333337616564只有一份被类的所有实例共享 2 静态变量的声明在编译时已经明确了内存的 ...

最新文章

  1. 讲解AI三大方向的模型与算法!
  2. CNCF宣布containerd毕业
  3. 『数据中心』降低PUE值4种方法
  4. OSPF网络类型详解
  5. -webkit-border-radius和-moz-border-radius(转)
  6. 【Android】自带Theme
  7. 点读笔客户端_新手妈妈如何选购点读笔
  8. 这家简历大数据公司被“一锅端” 或因私自抓取用户简历:曾获李开复投资
  9. Win10安装GPU版tensorflow和keras
  10. 《Gabor feature based sparse representation for face recognition with gabor occlusion dictionary》
  11. stm32是以c语言来编程吗,stm32用什么语言编程
  12. Webpack 学习笔记
  13. Vijos P1199核弹危机
  14. VB6.0视频教程78集,入门视频教程,基础够了(基础篇)
  15. ubuntu18.04在状态栏显示网速
  16. 苹果开发 笔记(69)SVProgressHUD
  17. java并发编程——创建线程之Thread 和 Runnable
  18. 利用pygame实现大鱼吃小鱼游戏
  19. 郑州大学计算机翟雨轩,郑州大学文件-20210331220732.doc-原创力文档
  20. Win10 64bit 下 Oracle 11g的下载与安装+PLSQL的安装 (超级详细)

热门文章

  1. 【转】系统管理类DOS命令汇总
  2. 苯环的神经网络C6H6
  3. C语言拾零(to be continued)
  4. STM32 基础系列教程 12 – ADC 中断
  5. 【工具】更新arduino最新esp8266库离线安装包3.0.1、ESP32库离线安装包1.0.6,库编译报错解决方法...
  6. FPGA篇(九)关于ASCII码
  7. 基于神经网络的控制器设计与仿真
  8. 基于FPGA的gardner同步环设计
  9. FreeRTOS 查询任务 剩余的栈空间的 方法
  10. JS(JavaScript)的初了解6(更新中···)