0

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

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? {
4

2 回答 2

1

怎么样

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

?

于 2018-10-17T22:10:29.233 回答
1

如果您的内联函数是我认为的那样(whenonT::class和不同类型的 get likegetStringgetInt,结果不安全),您应该避免使用它。

虽然键入起来稍微短一些,但它会生成大量垃圾字节码,并在运行时造成不必要的压力(when在程序运行时评估案例 - 但您在编译之前已经知道它们的结果)。

对于一些字节码示例,您可以查看对相关问题的回答。

于 2018-10-17T23:08:56.407 回答