Это, наверное, простой вопрос, но я его не вижу.Java-прослушиватель, общий и наследование
У меня есть интерфейс
public interface RenderableListener<T extends Renderable>{
public void update(T element);
}
У меня есть супер класс визуализируемого и класс Foo примера, который простирающийся визуализируемый.
сейчас, создавая класс Foo, я предоставляю экземпляр интерфейса в качестве слушателя/наблюдателя или что-то еще.
Foo foo = new Foo(new RenderableListener<Foo>(){
public void update(Foo element){}
});
до сих пор все работает и как бы то ни было.
но теперь в самом, когда я пытаюсь вызвать интерфейс, как этот класс Foo:
public class Foo extends Renderable {
private final RenderableListener<? extends Renderable> listener;
public Foo(RenderableListener<? extends Renderable> listener){
this.listener = listener;
}
public void update(){
listener.update(this);
}
}
я получаю эту ошибку:
Теперь вопрос у меня есть, что SpriteRenderable , рассматриваемый аргумент распространяется на Renderable. Что мне не хватает?
Редактировать: идея заключается в том, что я могу использовать одну реализацию интерфейса для каждого класса, расширяющего Renderable (и будет много).
Пожалуйста, рефакторинг кода (почему делает визуализируемых содержать ссылку на свой собственный слушатель?) И показать код SpriteRenderable. – Silverclaw
Прочитайте это: http://stackoverflow.com/questions/2723397/what-is-pecs-producer-extends-consumer-super –
@Silverclaw Ну, он должен держать ссылку. как иначе он мог бы назвать интерфейс? Я не уверен, что понимаю, что вы имеете в виду. – Adolf