我正在将我的spring boot 1.5+kotlin1.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(){
}
}
我遗漏了什么吗?
谢谢
文森特