编译测试库不编译静态方法接口(Java 8)



Java 8的一个特性是能够向接口添加静态方法。我正在研究基于注释处理器的java库,名为Kripton Persistence Library。

我正在使用谷歌编译测试库。当我尝试测试以下接口的编译时:

public interface AppDataSource {
static void execute(DaoPerson daoPerson) {
daoPerson.insert(new Person());
}
}

使用如下所示的代码:

ImmutableList<JavaFileObject> generated = com.google.testing.compile.Compiler.javac()
.compile(sourcesPhase1).generatedSourceFiles();

我收到以下错误:

sqlite/feature/transition/AppDataSource.java:29: error: modifier static not allowed here
static void execute(DaoPerson daoPerson) {

完整代码可在以下网址获得:

https://github.com/xcesco/kripton/tree/v5.x/kripton-processor/src/test/java/sqlite/feature/transition

我错了什么?

请检查您的编译器,它可能使用的是java8以下的版本。

静态方法是在java8中引入的,如果您的编译器使用java8,那么您在编译时不会出错。

如果您安装了 java8 版本,并且您的编译器使用以下版本而不是 java8,那么您将收到如下编译错误。

-source 1.7 中不支持静态接口方法 static void execute(( { ^ (使用 -source 8 或更高版本启用静态接口方法(


仅在源代码级别 1.8 或更高版本的接口中允许使用静态方法

请检查编译器使用的版本并更正。

最新更新