Generics 如何在Kotlin中编写泛型扩展方法?

Generics 如何在Kotlin中编写泛型扩展方法?,generics,extension-methods,kotlin,Generics,Extension Methods,Kotlin,在我正在从事的一个项目中,我发现自己为某些类型编写了一些扩展方法,以便在可选值为null时返回默认值 例如,我可能有一个Boolean?对象,我想在默认为false的条件表达式中使用它,因此我会写: if (myOptional?.default(false)) { .. } 我已经为几种类型写了这篇文章: fun Boolean?.default(default: Boolean): Boolean { return this ?: default } fun Long?.defa

在我正在从事的一个项目中,我发现自己为某些类型编写了一些扩展方法,以便在可选值为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 main(args:Array){
val k1:长?=null
val k2:长?=4L
println(k1.default(0L))//打印0
println(k2.default(0L))//打印4
}
乐趣T?默认值(默认值:T):T{
是否返回此项?:默认值
}

您可以创建一个方法来实现这一点,下面就是,尽管我不明白为什么您需要一个方法来实现这一点?您基本上可以直接使用
?:
。它更具可读性和紧凑性

扩展功能:

fun <T> T?.default(default: T): T {
    return this ?: default
}
funt T?.default(默认值:T):T{
是否返回此项?:默认值
}

这有什么意义?为什么不直接使用
?:
?它既标准又简洁。。。。。我想我没有真正的理由,哈哈。这只是我开始走的个人偏好路线。请注意
?。
中的
如果
是超群的话,沃丹。谢谢谢谢我同意,这可能不是正确的选择,但谢谢你回答这个问题。我真的迷恋于创建一个通用的扩展方法,但这有助于实现这一点,所以我把问题留给大家。将来可能有人会有更有用的需求哈哈