繁体   English   中英

如何在Kotlin中编写通用扩展方法?

[英]How to write a generic extension method in Kotlin?

在我正在研究的项目中,我发现自己为某些类型编写了一些扩展方法,如果可选项为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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM