Я собираю свой проект 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Я что-то упустил?
Спасибо
Винсент