在 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 指出的那样,每次执行都会创建一个新实例。
我想知道在下面的代码中,是否在不使用 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 指出的那样,每次执行都会创建一个新实例。