【问题标题】:How to import type extension function in Kotlin如何在 Kotlin 中导入类型扩展函数
【发布时间】:2018-07-06 11:56:10
【问题描述】:

我为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")
}

但是有未解决的参考错误

我应该如何使我的扩展函数全局化并将其导入到任何地方?

【问题讨论】:

  • 看起来它应该对我有用...两者都在一个项目中吗?

标签: kotlin kotlin-extension


【解决方案1】:

您应该在第二个代码 sn-p 中使用 import 语句而不是第二个 package 声明。

查看文档:https://kotlinlang.org/docs/reference/extensions.html#scope-of-extensions

实际上我不确定为 Any 类型进行扩展是否有效。我认为在这种情况下,您需要在 Any 类型的对象上调用它。

【讨论】:

  • 抱歉,这是帖子中的错误,而不是我的代码中的错误。谢谢
  • "实际上我不确定为 Any 类型进行扩展是否有效。"是的。
  • 一个例子是import okhttp3.MediaType.Companion.toMediaType
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
相关资源
最近更新 更多