#java #list #generics #interface #abstraction
#java #Список #дженерики #интерфейс #абстракция
Вопрос:
У меня есть несколько классов, которые все реализуют один и тот же интерфейс Java, который, по сути, позволяет извлекать значения содержимого SQLite, связанные с конкретным разработчиком, и эти классы сгруппированы в списки в различных классах по всему моему приложению. Я надеялся использовать общие методы вставки списка для обработки любого из этих списков, в идеале таким образом:
public void doSomething(List<? implements Interface) {
...
}
Тем не менее, дженерики / интерфейсы не функционируют таким образом. Теперь я мог бы сделать:
public void doSomething(List<? extends SuperClass) {
...
}
Если бы я сделал класс абстрактным (и установил методы по умолчанию для создания RuntimeExceptions для принудительного переопределения подклассами), это привело бы к тому же, что и по сути, только намного уродливее.
Это не «критически важно» для всего, над чем я работаю, мне просто любопытно, есть ли более плавные способы выполнения определенных задач.
Ответ №1:
public void doSomething(List<? extends Interface> list) {
...
}
с помощью дженериков, которые вы используете, расширяется даже для интерфейсов
Комментарии:
1. Я подумал, что должна быть настройка синтаксиса, которая позволила бы мне это сделать. Большое спасибо!
Ответ №2:
Разве вы не можете просто сделать
public void doSomething(List<? extends Interface> l) { ... }
Вы можете использовать extends
в общей спецификации подстановочных знаков как для интерфейсов, так и для классов.