Как получить доступ к функции расширения из внутреннего класса [AsyncTask] в Kotlin? - PullRequest
1 голос
/ 19 февраля 2020

Я программирую на Kotlin, и у меня есть функция расширения для класса Date.

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

Он отлично работает в onCreate, но внутри doInBackground в Async task это дает мне ошибку

У меня есть эти строки внутри doInBackground

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

getCurrentDateTime() возвращает экземпляр класса Date и для аргументов внутри toString() выдается ошибка

Слишком много аргументов для publi c open fun toString (): Строка, определенная в java .util.Date

Я думаю, что она пытается применить Java здесь как Date.toString().

Но как мне это решить?

1 Ответ

1 голос
/ 19 февраля 2020

Убедитесь, что вы импортировали функцию расширения в свой класс, а также проверьте, не является ли она функцией класса или экземпляра, последняя не будет работать. Может помочь фрагмент кода вашего AsyncTask.

Функция расширения, размещенная внутри класса, является функцией-членом включающего класса, поэтому вам нужна ссылка на экземпляр этого класса, например, активность, что - плохая идея. Поэтому, добавив функцию расширения к объекту-компаньону или сделав ее stati c, используя аннотацию @ JvmStati c, она станет доступной из других мест.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...