如何在 Kotlin 中编写通用扩展方法?
How to write a generic extension method in Kotlin?
在我正在进行的一个项目中,我发现自己为某些类型编写了一些扩展方法,以便 return 如果可选值为 null,则为默认值。
例如,我可能有一个 Boolean?
对象,我想在默认为 false 的条件表达式中使用它,所以我会写:
if (myOptional?.default(false)) { .. }
我已经为几种类型写了这篇文章:
fun Boolean?.default(default: Boolean): Boolean {
return this ?: default
}
fun Long?.default(default: Long): Long {
return this ?: default
}
fun Int?.default(default: Int): Int {
return this ?: default
}
我想知道是否有一种方法可以通用地执行此操作,以便我可以编写一种可用于所有类型的扩展方法?
我不会那样做,使用每个 Kotlin 开发人员都应该知道的标准 ?:
运算符,这样更简洁。
但是要回答你的问题:
fun main(args: Array<String>) {
val k1: Long? = null
val k2: Long? = 4L
println(k1.default(0L)) // prints 0
println(k2.default(0L)) // prints 4
}
fun <T> T?.default(default: T): T {
return this ?: default
}
您可以创建一个方法来执行此操作,它在下面,但我不明白您为什么需要一个方法?您基本上可以直接使用 ?:
。它更具可读性和紧凑性。
扩展函数:
fun <T> T?.default(default: T): T {
return this ?: default
}
在我正在进行的一个项目中,我发现自己为某些类型编写了一些扩展方法,以便 return 如果可选值为 null,则为默认值。
例如,我可能有一个 Boolean?
对象,我想在默认为 false 的条件表达式中使用它,所以我会写:
if (myOptional?.default(false)) { .. }
我已经为几种类型写了这篇文章:
fun Boolean?.default(default: Boolean): Boolean {
return this ?: default
}
fun Long?.default(default: Long): Long {
return this ?: default
}
fun Int?.default(default: Int): Int {
return this ?: default
}
我想知道是否有一种方法可以通用地执行此操作,以便我可以编写一种可用于所有类型的扩展方法?
我不会那样做,使用每个 Kotlin 开发人员都应该知道的标准 ?:
运算符,这样更简洁。
但是要回答你的问题:
fun main(args: Array<String>) {
val k1: Long? = null
val k2: Long? = 4L
println(k1.default(0L)) // prints 0
println(k2.default(0L)) // prints 4
}
fun <T> T?.default(default: T): T {
return this ?: default
}
您可以创建一个方法来执行此操作,它在下面,但我不明白您为什么需要一个方法?您基本上可以直接使用 ?:
。它更具可读性和紧凑性。
扩展函数:
fun <T> T?.default(default: T): T {
return this ?: default
}