一、源代码
1.1 饿汉式
class Utils private constructor() {
companion object {
fun getInstance(): Utils {
return Instance.instance
}
}
private object Instance {
val instance = Utils()
}
}
1.2 懒汉式
class Utils private constructor() {
companion object {
val instance by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
Utils()
}
}
}
二、使用方法
2.1 java中使用
public void useSingle() {
Utils instance = Utils.Companion.getInstance();
}
2.2 kotlin中使用
fun useSingle(){
var instance = Utils.instance
}
三、Kotlin编译至java源码(饿汉式)
import kotlin.Metadata;
import kotlin.jvm.internal.DefaultConstructorMarker;
import org.jetbrains.annotations.NotNull;
@Metadata(
mv = {1, 1, 15},
bv = {1, 0, 3},
k = 1,
d1 = {"\u0000\f\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0004\u0018\u0000 \u00032\u00020\u0001:\u0002\u0003\u0004B\u0007\b\u0002¢\u0006\u0002\u0010\u0002¨\u0006\u0005"},
d2 = {"Lcom/piaopiao/singleinstancekotlin/Utils;", "", "()V", "Companion", "Instance", "app_debug"}
)
public final class Utils {
public static final Utils.Companion Companion = new Utils.Companion((DefaultConstructorMarker)null);
private Utils() {
}
public Utils(DefaultConstructorMarker $constructor_marker) {
this();
}
@Metadata(
mv = {1, 1, 15},
bv = {1, 0, 3},
k = 1,
d1 = {"\u0000\u0014\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0003\bÂ\u0002\u0018\u00002\u00020\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002R\u0011\u0010\u0003\u001a\u00020\u0004¢\u0006\b\n\u0000\u001a\u0004\b\u0005\u0010\u0006¨\u0006\u0007"},
d2 = {"Lcom/piaopiao/singleinstancekotlin/Utils$Instance;", "", "()V", "instance", "Lcom/piaopiao/singleinstancekotlin/Utils;", "getInstance", "()Lcom/piaopiao/singleinstancekotlin/Utils;", "app_debug"}
)
private static final class Instance {
@NotNull
private static final Utils instance;
public static final Utils.Instance INSTANCE;
@NotNull
public final Utils getInstance() {
return instance;
}
static {
Utils.Instance var0 = new Utils.Instance();
INSTANCE = var0;
instance = new Utils((DefaultConstructorMarker)null);
}
}
@Metadata(
mv = {1, 1, 15},
bv = {1, 0, 3},
k = 1,
d1 = {"\u0000\u0012\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0000\b\u0086\u0003\u0018\u00002\u00020\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002J\u0006\u0010\u0003\u001a\u00020\u0004¨\u0006\u0005"},
d2 = {"Lcom/piaopiao/singleinstancekotlin/Utils$Companion;", "", "()V", "getInstance", "Lcom/piaopiao/singleinstancekotlin/Utils;", "app_debug"}
)
public static final class Companion {
@NotNull
public final Utils getInstance() {
return Utils.Instance.INSTANCE.getInstance();
}
private Companion() {
}
public Companion(DefaultConstructorMarker $constructor_marker) {
this();
}
}
}