Вызывается: java.lang.AbstractMethodError: абстрактный метод в Kotlin - PullRequest
0 голосов
/ 30 мая 2018

У меня есть этот код здесь:

interface MyClass {
    fun main() {
        File(TentDatabase.getPathRepository(context)).walkBottomUp()
                .filter { it.isFile }
                .forEach { parseFiles(it) } //I think here is the problem
    }

      fun parseFiles(file: File) {
             val extension = file.path.substringAfterLast('.', "")
             Log.i("DB", "name - $extension")
      } 
}

Когда я пытаюсь запустить этот код, я получаю исключение:

Caused by: java.lang.AbstractMethodError: abstract method "void org.secfirst.umbrella.data.internal.TentDao.parseFiles(java.io.File)"

Как передать функцию в качестве параметра?Я просто хочу выполнить parseFiles (файл) для каждой итерации.

1 Ответ

0 голосов
/ 30 мая 2018

На ваш вопрос:

Как передать функцию в качестве параметра?Я просто хочу выполнить parseFiles (файл) для каждой итерации

Вы можете просто заменить:

.forEach { parseFiles(it) }

на:

.forEach(::parseFiles)

Что представляет собой ссылку, вы передаете имя функции, которая может позаботиться о типе параметра, который будет выдан forEach.


Но исключение, которое вы получаете, связано с чем-то другим.Я думаю, что это связано с версией вашего окончательного байт-кода.Я тестировал ваш код в среде, используя

sourceCompatibility JavaVersion.VERSION_1_8

и

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

, поэтому в java 8 у вас есть доступ к default методам на интерфейсах, Kotlin имеет это по умолчанию, но если выориентированы на Java 7, вероятно, у вас нет доступа к этому.Это мое предположение.

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