【问题标题】:How to access extension function from inner class[AsyncTask] in Kotlin?如何从 Kotlin 中的内部类 [AsyncTask] 访问扩展功能?
【发布时间】:2020-02-19 10:48:04
【问题描述】:

我在 Kotlin 中编程,我有 Date 类的扩展功能。

fun Date.toString(format: String, locale: Locale = Locale.getDefault()): String {
    val formatter = SimpleDateFormat(format, locale)
    return formatter.format(this)
}

它在onCreate 中运行良好,但在Async task 中的doInBackground 内部却给了我错误

我在doInBackground里面有这些行

    val currentDateTime = MainActivity().getCurrentDateTime()
    val timeIs = currentDateTime.toString("HH:mm:ss")

getCurrentDateTime() 返回Date 类的实例 toString() is 中的参数给出错误

toString():String 在 java.util.Date 中定义的公共开放乐趣的参数太可能了

我认为它正在尝试在这里应用 Java,例如 Date.toString()

但是我应该怎么解决呢?

【问题讨论】:

  • 它是如何调用的?
  • @Aivaras 我已经更新了问题,请检查

标签: android kotlin


【解决方案1】:

检查您是否在类中导入了扩展函数,还要检查它是类还是实例函数,后者不起作用。 您的 AsyncTask 的代码 sn-p 可能会有所帮助。

扩展函数,放置在类中,是封闭类的成员函数,所以你需要引用该类的实例,例如活动,这是个坏主意。 因此,使用@JvmStatic 注解将扩展函数添加到伴生对象或使其成为静态,将使其可以从其他地方访问。

【讨论】:

  • 我的活动中有扩展功能
  • 将函数放入activity的伴生对象中,它应该可以工作
  • 只有命名对象和伴生对象中的成员才能用@JvmStatic注解
  • @Makarand 你错了。包级函数对于静态也是合法的。
  • "只有命名对象和伴生对象中的成员可以用@JvmStatic 注释" 这是我在MainActivity 中声明的上述方法上添加@JvmStatic 注释时遇到的错误
猜你喜欢
  • 2018-03-13
  • 2018-02-02
  • 1970-01-01
  • 2019-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
  • 2023-03-06
相关资源
最近更新 更多