Kotlin扩展功能为未知类型

时间:2018-10-17 21:52:22

标签: kotlin extension-function

是否可以将扩展函数与返回未指定值类型的函数一起使用?

defaultPreferences(this)["some string"]?.let { ...

为了避免错误,我必须这样做,但是我真的希望它在一行中。

val value: String? =  defaultPreferences(this)["some string"]
value?.let { ...

第一个示例中出现的错误是

"Type inference failed: Not enough information to infer parameter T in inline operator fun <reified T : Any> SharedPreferences.get(key: String, defaultValue: T? = ...): T?
Please specify it explicitly."

有什么想法吗?

编辑:更多信息

这是get函数的声明。

inline operator fun <reified T : Any> SharedPreferences.get(key: String, defaultValue: T? = null): T? {

2 个答案:

答案 0 :(得分:1)

怎么样

defaultPreferences(this).get<String?>("some string")?.let {

答案 1 :(得分:1)

如果您的内联函数是我认为的样子(when上的T::class,并且不同类型的获取类似getStringgetInt等,并且不安全地转换结果)您应该避免使用它。

虽然键入稍短,但会生成大量垃圾字节码,并在运行时造成不必要的负担(when情况在程序运行时进行评估-但您在编译之前已经知道了结果)。

对于某些字节码样本,您可以查看my answer的相关问题。