Я написал несколько дженериков с наследованием, но не могу заставить его работать с типами. Моя цель состоит в том, чтобы предоставить общее число BaseService
, что я могу вывести метод action(base)
, независимо от того, является ли объект base
Foo extends Base
или Bar extends Base
.Как использовать дженерики с наследованием?
Следующие не работают, почему?
class Base;
class Foo extends Base;
interface BaseService<T extends Base> {
void action(T base);
}
class FooService implements BaseService<Foo> {
void action(Foo foo) {
}
}
//usage:
//complains that the method is not applicable for the argument,
//and that I should change action(T) to action(Base). Why?
Base base;
getService().action(base);
//just to demonstrate the problem
BaseService<? extends Base> getService() {
return new FooService();
}
Возможный дубликат «[Is« Список »подкласс« Список »? Почему не генерируются генетические средства Java, неявно полиморфные?] (Http://stackoverflow.com/questions/2745265/is-listdog-a- подкласс-оф-listanimal-почему-ARENT-Javas-дженериков-неявные) «. –
wchargin
Если да, что я могу сделать, чтобы заставить мой пример работать? – membersound
Это уже типичный. Слишком типично. Я не думаю, что для этого вам нужны Generics. – EJP