Недавно я столкнулся с этим сценарием в коде, который я не писал, и хотя может быть какое-то преимущество в плане такого подхода, я не могу сжать это обоснование из моего собственного мозга. Поэтому, прежде чем я пойду и посмотрю глупо, я надеюсь получить отклик здесь.Преимущества использования дженериков в базовом классе, которые также реализуют один и тот же класс
Сервисный интерфейс что-то вроде этого:
public interface Service {...}
Затем базовый класс, который добавляет общую ссылку на интерфейс Service, где T расширяет службу, но затем общий базовый класс также реализует интерфейс. Что-то вроде этого:
public class ServiceBase<T extends Service> implements Service {...}
Зачем вам это нужно? Я замечаю, что на практике расширение ServiceBase всегда использует то же имя класса, что и T, как тот, который объявляется; поэтому здесь нет никакой волшебной полиморфной выгоды. Что-то вроде этого:
public class MyService extends ServiceBase<MyService> {...}
и класс MyService никогда не контейнер для общего (например, я не считаю, что это сигнализация какой-то самостоятельной содержащий список, где MyService может содержать список MyServices).
Любые идеи/мысли о том, почему кто-то это сделает?
Возможно, если бы вы могли опубликовать больше из тел этих классов, было бы легче увидеть обоснование этого. – manouti
Делегирует 'ServiceBase'' Service' в каком-то экземпляре 'T'? – weston
Это похоже на вопрос, почему класс Enum объявлен следующим образом: Enum> ': [здесь] (http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeParameters.html#FAQ106) Если ServiceBase сделал что-то вроде реализации 'Comparable ', который требует подклассов, это может иметь смысл. –
Calculator