JvmDefault Kotlin - все еще нужно объявить метод? - PullRequest
0 голосов
/ 04 июня 2018

Я собираю свой проект Spring Boot 1.5 + Kotlin 1.2.41 в банку.Один из интерфейсов в банке имеет @JvmDefault, и он прекрасно компилируется с флагом (если я уберу флаг, произойдет сбой).

Теперь я пытаюсь использовать этот интерфейс в другом Java-проекте, в котором я определяю проект Kotlin как зависимость.

В одном реализующем классе я не переопределяю метод по умолчанию.Интеллидж вроде бы с этим согласен, так как не жалуется.Тем не менее, когда я компилирую с Maven, я получаю:

[ERROR] attempting to assign weaker access privileges; was public

Если я реализую метод (с некоторой фиктивной реализацией), то он компилируется ... но это противоречит цели интерфейса по умолчанию.

Есть идеи, что может быть не так?

При открытии кода интерфейса Kotlin из проекта Java, я вижу декомпилированный код:

public interface CrawlerOutput {
    @kotlin.jvm.JvmDefault public open fun finalize(): kotlin.Unit { /* compiled code */ }

    public abstract fun output(analyzedRepository: com.myCompany.Repository): kotlin.Unit
}

Мой код Java, реализующий интерфейс:

public class CsvOutput implements CrawlerOutput {

    @Override
    public void output(Repository repository) throws IOException {
        log.info("own output is receiving some data !");
    }

    /**
    * IF I REMOVE BELOW METHOD, MAVEN CAN'T COMPILE IT ANYMORE, 
    * COMPLAINING OF WEAKER ACCESS PRIVILEGE
    */      
    @Override
    public void finalize(){

    }

}

AmЯ что-то упустил?

Спасибо

Винсент

1 Ответ

0 голосов
/ 07 июня 2018

Имя вашего метода конфликтует с java.lang.Object.finalize().Ошибка должна быть исправлена, если вы выберете другое имя метода.

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