Выражение 'return length as Int.toString' типа 'Nothing' не может быть вызвано как функция - PullRequest
1 голос
/ 10 июля 2020
private String getFileSize(long length) {
    DecimalFormat df = new DecimalFormat("######0.0");
    if (length < 1024.f) {
        return (int) length + " B";
    } else if (length < 1024 * 1024.f) {
        return df.format(length / 1024.f) + " KB";
    } else if (length < 1024 * 1024 * 1024.f) {
        return df.format((length / 1024.f / 1024.f)) + " MB";
    }
    return df.format(length / 1024.f / 1024.f / 1024.f) + " GB";
}

Исходный код

private fun getFileSize(length: Long): String {
    val df = DecimalFormat("######0.0")
    if (length < 1024f) {
        return length as Int.toString() + " B"
    } else if (length < 1024 * 1024f) {
        return df.format(length / 1024f.toDouble()) + " KB"
    } else if (length < 1024 * 1024 * 1024f) {
        return df.format((length / 1024f / 1024f).toDouble()) + " MB"
    }
    return df.format(length / 1024f / 1024f / 1024f.toDouble()) + " GB"
}

Код после Java до Kotlin Конверсия

return length as Int.toString() + " B"

Ошибка: выражение 'возвращает длину как Int.toString' типа ' Ничего не может быть вызвано как функция. Функция invoke () не найдена. Неразрешенная ссылка: toString.

1 Ответ

1 голос
/ 10 июля 2020

Вы вызываете метод Int.toString как метод datatype.toString, который ничего не дает, поэтому вместо этого используйте String интерполяцию как

return "$length B"

или toString как

return length.toString() + " B"

Вы также можете использовать выражения с интерполяцией строк внутри ${expression} как

return "${df.format(length / 1024.f)} KB";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...