如何在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 }