如何在 Kotlin 中导入类型扩展函数
How to import type extension function in Kotlin
我为 Any
类型编写了一个扩展函数,它将通过名称检索对象 属性 的值。我希望能够在我项目的任何地方使用它。这是我的扩展函数:
package com.example.core.utils.validation
import java.util.NoSuchElementException
import kotlin.reflect.full.memberProperties
fun Any.getFieldValue(fieldName: String): Any? {
try {
return this.javaClass.kotlin.memberProperties.first { it.name == fieldName }.get(this)
} catch (e: NoSuchElementException) {
throw NoSuchFieldException(fieldName)
}
}
现在我想这样用
package com.example.core
import com.example.core.utils.validation.*
class App {
val obj = object {
val field = "value"
}
val fieldValue = obj.getFieldValue("field")
}
但是存在未解决的引用错误
我应该如何使我的扩展函数全局化并将其导入到任何地方?
您应该在第二个代码片段中使用 import 语句而不是第二个 package 声明。
查看文档:https://kotlinlang.org/docs/reference/extensions.html#scope-of-extensions
实际上我不确定对 Any 类型进行扩展是否有效。我认为在那种情况下你需要在 Any 类型的对象上调用它。
我为 Any
类型编写了一个扩展函数,它将通过名称检索对象 属性 的值。我希望能够在我项目的任何地方使用它。这是我的扩展函数:
package com.example.core.utils.validation
import java.util.NoSuchElementException
import kotlin.reflect.full.memberProperties
fun Any.getFieldValue(fieldName: String): Any? {
try {
return this.javaClass.kotlin.memberProperties.first { it.name == fieldName }.get(this)
} catch (e: NoSuchElementException) {
throw NoSuchFieldException(fieldName)
}
}
现在我想这样用
package com.example.core
import com.example.core.utils.validation.*
class App {
val obj = object {
val field = "value"
}
val fieldValue = obj.getFieldValue("field")
}
但是存在未解决的引用错误
我应该如何使我的扩展函数全局化并将其导入到任何地方?
您应该在第二个代码片段中使用 import 语句而不是第二个 package 声明。
查看文档:https://kotlinlang.org/docs/reference/extensions.html#scope-of-extensions
实际上我不确定对 Any 类型进行扩展是否有效。我认为在那种情况下你需要在 Any 类型的对象上调用它。