首页 > 解决方案 > 在kotlin中创建一个没有object关键字的单例

问题描述

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

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

我读过文档。比较器是一个接口。

标签: kotlinobjectsingleton

解决方案


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)
    }
}

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

我读过文档。比较器是一个接口。

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

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


推荐阅读