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

时间:2017-05-06 23:43:59

标签: generics extension-methods kotlin

在我正在进行的项目中,我发现自己为某些类型编写了一些扩展方法,如果可选项为null,则返回默认值。

例如,我可能有一个if (myOptional?.default(false)) { .. } 对象,我想在条件表达式中使用它默认为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
}

我已经为几种类型写了这个:

getPreferenceManager()

我想知道是否有一种方法可以做到这一点,所以我可以编写一种可以用于所有类型的扩展方法吗?

2 个答案:

答案 0 :(得分:5)

我不会这样做,并且使用每个Kotlin开发人员应该知道的标准p运算符,这样更简洁。

但要回答你的问题:

?:

答案 1 :(得分:2)

你可以创建一个方法来执行此操作,虽然我不知道为什么你想要一个方法呢?您基本上可以直接使用?:。它更具可读性和紧凑性。

扩展功能:

fun <T> T?.default(default: T): T {
    return this ?: default
}