библиотека тестирования компиляции не компилирует статический метод интерфейса (Java 8) - PullRequest
0 голосов
/ 04 сентября 2018

Одной из особенностей Java 8 является возможность добавления статического метода к интерфейсу. Я работаю над библиотекой Java на основе процессора аннотаций с именем Kripton Persistence Library .

Я использую библиотеку тестирования компиляции Google Когда я пытаюсь проверить компиляцию следующего интерфейса:

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

Что я не прав?

1 Ответ

0 голосов
/ 04 сентября 2018

Пожалуйста, проверьте ваш компилятор, возможно, он использует версию ниже java8.

Статические методы представлены в java8, и если ваш компилятор использует java8, то при компиляции вы не получите ошибку.

Если вы установили версию java8 и ваш компилятор использует версии ниже, а не java8, вы получите ошибки компиляции следующим образом.

статические методы интерфейса не поддерживаются в -source 1.7 static void execute () { ^ (используйте -source 8 или выше для включения статических методов интерфейса)

или
Статические методы разрешены в интерфейсах только на уровне источника 1.8 или выше

Пожалуйста, проверьте версию, используемую вашим компилятором, и исправьте ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...