Список разработчиков?

#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 в общей спецификации подстановочных знаков как для интерфейсов, так и для классов.