对比Java学Kotlin单例模式
Posted 陈蒙_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对比Java学Kotlin单例模式相关的知识,希望对你有一定的参考价值。
文章目录
Java 实现
先来回忆一下 Java 代码实现单例的一种方式:
public class Singleton
private static Singleton instance = null;
private Singleton()
public static Singleton getInstance()
if (instance == null)
synchronized (Singleton.class)
if (instance == null)
instance = new Singleton();
return instance;
更多单例模式见 单例模式。
Kotlin 实现
那 Kotlin 的单例模式如何实现呢?是不是也有好几种方式呢?
下面就是见证奇迹的时刻:
object Singleton
是的,你没有看错,就这一行代码。使用方式:
Singleton.INSTANCE.method()
下面是带入参的实现方式:
用法:
Singleton.getInstance(context).doSomething()
Singleton 和 SingletonHolder 的实现:
class Singleton private constructor(context: Context)
init
// do something with context
companion object : SingletonHolder<Singleton, Context>(::Singleton)
open class SingletonHolder<out T: Any, in A>(creator: (A) -> T)
private var creator: ((A) -> T)? = creator
@Volatile private var instance: T? = null
fun getInstance(arg: A): T
val checkInstance = instance
if (checkInstance != null)
return checkInstance
return synchronized(this)
val checkInstanceAgain = instance
if (checkInstanceAgain != null)
checkInstanceAgain
else
val created = creator!!(arg)
instance = created
creator = null
created
参考文档
以上是关于对比Java学Kotlin单例模式的主要内容,如果未能解决你的问题,请参考以下文章