1

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

我错了什么?

4

1 回答 1

2

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

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

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

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


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

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

于 2018-09-04T12:46:55.700 回答