在 kotlin 中创建一个没有 object 关键字的单例

Create a singleton without the object keyword in kotlin

我想知道在下面的代码中,是否在不使用 object 关键字的情况下创建了单例:

val a = Comparator<Int>{o1, o2 -> o1.compareTo(o2)}

我已经阅读了文档。比较器是一个接口。

val a = Comparator<String>{o1, o2 -> o1.compareTo(o2)}

相同
val a = object: Comparator<String>{
    override fun compare(o1: String, o2: String): Int {
        return o1.compareTo(o2)
    }
}

两者都创建了匿名内部的实例 class,您不能在给定的执行中创建另一个实例。您可以将后面的代码转换为 lambda,因为 Comparator 是一个具有单个抽象函数的函数式接口。

I’ve read the doc. Comparator is an interface.

是的,它是一个接口,但是上面的代码所做的是立即创建一个 singleton 实例 Comparator

更新:我错误地认为它是一个单例,但正如 gidds 指出的那样,每次执行都会创建一个新实例。