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

compile testing library does not compile static method of interface (Java 8)

Java8 的一个特点是能够向接口添加静态方法。我正在开发基于注释处理器的 java 库,名为 Kripton Persistence Library.

我正在使用 google compile testing 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 不支持静态接口方法 静态无效执行(){ ^ (使用 -source 8 或更高版本启用静态接口方法)


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

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