kotlin单列模式
来源:互联网 发布:lofter绑定独立域名 编辑:程序博客网 时间:2024/06/12 00:54
1.传统java模式:
class AppManagerUtils private constructor() { companion object { // Activity栈 private var activityStack: Stack<Activity>? = null // 单例模式 private var instance: AppManagerUtils? = null /** * 单一实例,加安全锁 */ val appManager: AppManagerUtils @Synchronized get() { if (instance == null) { instance = AppManagerUtils() } return instance!! }// // 托管单例模式赋值// private var appManager : AppManagerUtils by Delegates.notNull<AppManagerUtils>()//// fun getInstance(): AppManagerUtils{// return appManager// } }
}
2.现代kotlin模式:
class AppManagerUtils private constructor() { companion object { // Activity栈 private var activityStack: Stack<Activity>? = null// // 单例模式// private var instance: AppManagerUtils? = null//// /**// * 单一实例,加安全锁// */// val appManager: AppManagerUtils// @Synchronized get() {// if (instance == null) {// instance = AppManagerUtils()// }// return instance!!// }// 托管单例模式赋值private var appManager : AppManagerUtils by NoClassNullExt.noNullClassObject<AppManagerUtils>()// 获取对象fun getInstance( ): AppManagerUtils{ //调用前先给值,否则报错,我觉得有点浪费资源,不过也能确保不会null appManager = AppManagerUtils() return appManager}}//拜托类
object NoNullExt { /** * 通用获取单列对象 */ fun<T> noNullClassObject():ReadWriteProperty<Any?,T>{ return OutClassObject<T>() }}//托管类
class OutClassObject<T>:ReadWriteProperty<Any?,T> { // 定义一个可变变量保存委托值 private var classValue:T? = null /** * 设置委托值 * @param thisRef * @param property * @param value 委托传入的类对象值 */ override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) { if(classValue==null){ classValue = value } } /** * 获取返回委托值,如果委托值=null,则抛出异常 */ override fun getValue(thisRef: Any?, property: KProperty<*>): T { if (classValue==null) { throw IllegalStateException("Error:${javaClass.name}-->如果变量的值null,则抛出异常。") } return classValue }}
阅读全文
0 0
- kotlin单列模式
- 单列模式
- 单列模式
- 单列模式
- 单列模式
- 单列模式
- 单列模式
- 单列模式
- 单列模式
- 单列模式
- 单列模式
- 单列模式
- 单列模式
- 单列模式
- 单列模式
- 单列模式
- 单列模式
- 单列模式
- 获取页面中name相同的input或者select标签的option值
- 为什么使用四元数
- CC2530 如何修改网络拓扑
- xencenter创建快照和恢复快照
- 【bzoj3747】[POI2015]Kinoman
- kotlin单列模式
- 日志采集框架Flume
- MFC如何在有界面的应用程序中开启控制台窗口
- Spring Data JPA @Query
- android 开发 命名规范
- 设计模式基本原则
- SDL_播放声音_Mix
- 排序算法(C++)
- 23种设计模式(1):单例模式