Kotlin的JvmDefault - 还需要声明方法吗?

时间:2018-06-04 10:57:47

标签: java kotlin

我正在将我的Spring Boot 1.5 + Kotlin 1.2.41项目构建到一个jar中。 jar中的一个接口有@JvmDefault,并且它与标志编译良好(如果我删除标志,它会失败)。

现在,我正在尝试在另一个java项目中使用此接口,在该项目中我将Kotlin项目定义为依赖项。

在一个实现类中,我没有覆盖默认方法。 Intellij似乎没问题,因为它没有抱怨。但是,当我使用Maven编译时,我得到:

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

如果我实现了这个方法(带有一些虚拟实现),那么它会编译......但它会破坏默认接口的目的。

知道可能出现什么问题吗?

从java项目打开Kotlin接口代码时,这是我看到的反编译代码:

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(){

    }

}

我错过了什么吗?

由于

文森特

1 个答案:

答案 0 :(得分:1)

您的方法名称与java.lang.Object.finalize()冲突。如果您选择其他方法名称,则应修复错误。