У меня возникли проблемы с получением следующего кода:
Интерфейс:
public interface UOWProcessor {
public default Integer countUOW(Object args) {
return 1;
}
}
Реализация:
public class ListUOWProcessor implements UOWProcessor {
private Integer total;
@Autowired
private UOWProcessor uowProcessor;
@Override
public Integer countUOW(List<?> args) {
for (Object arg : args) {
total += uowProcessor.countUOW(arg);
}
return total;
}
}
Редактировать: добавление второй реализации для пояснениянамерение
public class MapUOWProcessor implements UOWProcessor {
private Integer total;
@Autowired
private UOWProcessor uowProcessor;
@Override
public Integer countUOW(Map<?, ?> args) {
for (Object item : args.values()) {
total += uowProcessor.countUOW(item);
}
return total;
}
}
Беда в том, что аннотация @Override выдает ошибку, которая говорит the method does not override a method from its superclass
.Это Java 11. Какой правильный синтаксис для этого?
Вот что я пытаюсь сделать на английском языке, если это не ясно из выше:
Другой класс вызовет метод интерфейсаcountUOW (Объект неизвестного типа).
Если существует реализация этого интерфейса для типа объекта (например, ListUOWProcessor для списков, MapProcessor для карт), реализация будет вызвана и будет повторяться и возвращатьсяВсего (в основном количество объектов).Это вызывается рекурсивно для учета вложенных массивов / списков.
Если реализации не существует, мы можем предположить, что передаваемый объект - это какой-то неспецифический объект, число которого затем равно 1.
. При исходном вызове метода мы должны затем вернутьколичество всех Объектов в родительском Объекте, которые были переданы, включая объекты во вложенных массивах или картах.
Я также мог бы удалить это слово «default» из Интерфейса и просто создать ObjectUOWProcessor, который делает то же самое- однако я беспокоюсь, что это может иметь приоритет над любой другой реализацией, потому что List, Array, Map - все расширения Object.
Edit: Я понимаю, что это не Override, сейчас,но перегрузка.Достигнет ли код без аннотации @Override описанной функциональности?