未知类型的 Kotlin 扩展函数
Kotlin extension function to an unknown type
是否可以将扩展函数与 returns 未指定值类型的函数一起使用?
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? {
怎么样
defaultPreferences(this).get<String?>("some string")?.let {
?
如果你的内联函数是我认为的那样(when
on T::class
并且不同的类型变得像 getString
、getInt
等。结果)你应该避免使用它。
虽然打字稍微短一点,但它会生成大量垃圾字节码,并在运行时造成不必要的压力(when
案例在程序运行时进行评估 - 但您在编译前就已经知道它们的结果)。
对于一些字节码示例,您可以查看 相关问题。
是否可以将扩展函数与 returns 未指定值类型的函数一起使用?
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? {
怎么样
defaultPreferences(this).get<String?>("some string")?.let {
?
如果你的内联函数是我认为的那样(when
on T::class
并且不同的类型变得像 getString
、getInt
等。结果)你应该避免使用它。
虽然打字稍微短一点,但它会生成大量垃圾字节码,并在运行时造成不必要的压力(when
案例在程序运行时进行评估 - 但您在编译前就已经知道它们的结果)。
对于一些字节码示例,您可以查看