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 或更高版本的接口中允许使用静态方法
请检查编译器使用的版本并更正。