当前位置: 首页 > 知识库问答 >
问题:

如何从Kotlin中的内部类[AsyncTask]访问扩展函数?

饶谦
2023-03-14

我在Kotlin编程,我有日期类的扩展功能。

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

它在< code>onCreate中工作正常,但是在< code >异步任务中的< code>doInBackground中出现错误

我里面有这些线 do 在后台

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

< code > getCurrentDateTime()返回< code>Date类的实例,并且为< code>toString()中的参数给出了错误

也可以参数为公共开放的乐趣toString():字符串定义在java.util.Date

我认为它试图在这里应用Java,就像日期一样。

但是我应该怎么解决呢?

共有1个答案

郎睿
2023-03-14

检查你是否在你的类中导入了扩展函数,也检查它是类还是实例函数,后者不能工作。AsyncTask的代码片段可能会有所帮助。

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

 类似资料:
  • 我在Kotlin文件中定义了扩展函数。 其中是(生成的)java类。现在,我想用正常的java代码访问它: 然而,那是行不通的。IDE将无法识别方法,编译失败。

  • 问题内容: 在下面显示的代码片段中,内部类本身继承了外部类。 方法中的唯一语句(最后一个片段)将值分配给类的私有字段,然后调用该方法。 该方法会导致另一个字符串- 要设置的私人领域中的类调用之前的方法延长。 因此,方法中的以下两个语句: 应该显示 另一个价值 另一个价值 但是他们显示 初始值 初始值 为什么会这样? 问题答案: 方法和领域都是。因此,其他子类(包括子类)均无法访问它们。它们不是继承

  • 问题内容: 是否可以从Java代码访问扩展功能? 我在Kotlin文件中定义了扩展功能。 (生成的)java类在哪里。现在,我想用普通的Java代码访问它: 但是,这不起作用。 IDE无法识别该方法,并且编译失败。 起作用的是与kotlin的静态函数一起使用: 通过使用我的IDE似乎已正确配置。 我从kotlin文档中搜索了整个Java互操作文件,并且在谷歌上搜索了很多,但是找不到。 我究竟做错了

  • 问题内容: 我想更改类的方法的执行方式,而不覆盖该方法,而仅覆盖(或理想地扩展)内部类。假设我无法更改需要执行此操作的事实(我正在修改现有的开放源代码库,因此拔出类或其他方法会遇到麻烦)。 我的目标是通过仅更改Thing,使B的toString()返回“ 30”,当前在该位置将返回“ 20”。理想的情况是仅更改方法value2(从而使任何其他方法保持不变),但是我不知道这是否可行。 谢谢 问题答案

  • 我想在使用Kotlin扩展函数时访问Java的私有字段。 假设我有一个Java类。ABC只有一个私有字段。我想用静态编程语言编写一个扩展函数,无论出于什么原因使用该字段。 Kotlin的功能是: 我得到的错误是: 无法访问“mPrivateField”:它在“ABC”中是专用的 有没有办法绕过这个限制?

  • 问题内容: 是否可以从Java内部类中获取对它的引用? 即 问题答案: 您可以像这样访问外部类的实例: