Редактировать: . Урезать до основной проблемы.
Я пытаюсь реализовать Springs CrudRepository<T, ID>
в классе Groovy, который не может быть скомпилирован с:
Не может иметь абстрактный метод в неабстрактном классе.Класс [..] должен быть объявлен как абстрактный или должен быть реализован метод ' java.lang.Object save (java.lang.Object) '.
Эти ошибки влияют наметоды только с подписью <S extends T>
.Для проблем с Generics имеется ошибка Groovy, но она должна быть решена!Я сохранил ответ на этот вопрос и добавил модификаторы, но все еще не могу скомпилировать.
Пример
Следующий код не будет компилироваться в консоли IntelliJ Groovy на моем компьютеремашина, использующая javac, Eclipse-компилятор или Groovy-Eclipse.
class Account { int id }
interface Repo<T, ID> {
public T get(ID id)
public <S extends T> S save(S entity)
}
class AccountRepo implements Repo<Account, Long> {
@Override
Account get(Long aLong) {
return null
}
@Override
public <S extends Account> S save(S entity) {
return null
}
}
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
ideaGroovyConsole.groovy: 9: Can't have an abstract method in a non-abstract class. The class 'AccountRepo' must be declared abstract or the method 'java.lang.Object save(java.lang.Object)' must be implemented.
@ line 9, column 1.
class AccountRepo implements Repo<Account, Long> {
^
1 error
Просто для записи, я использую Groovy 2.5.4.