X is not applicable for Y arguments when X extends Y

EventHandler.java:

public abstract class EventHandler<E> { public abstract void HandleEvent(Object sender, E e); } 

Foo.java:

 private OnProgressEventHandler m_OnProgressEventHandler = new OnProgressEventHandler(); private class OnProgressEventHandler extends EventHandler<ProgressEventArgs> { public void HandleEvent(Object sender, ProgressEventArgs args) { /*...*/ } } 

ProgressEventArgs.java:

 public class ProgressEventArgs extends EventArgs { /*...*/ } 

Bar.java:

 public void addProgressEventListener(EventHandler<EventArgs> listener) { m_OnProgress.addListener(listener); } 

This line:

 myBarObject.addProgressEventListener(m_OnProgressEventHandler); 

causes:

The addProgressEventListener (EventHandler) method in type Bar is not applicable for arguments (Foo.OnProgressEventHandler)

I do not understand why it does not compile, because OnProgressEventHandler extends EventHandler<ProgressEventArgs> . I am sure this is something trivial that I missed, but I can’t understand why.

+1
source share
1 answer

Edit

 public void addProgressEventListener(EventHandler<EventArgs> listener) { m_OnProgress.addListener(listener); } 

to

 public void addProgressEventListener(EventHandler<? extends EventArgs> listener) { m_OnProgress.addListener(listener); } 
+2
source

Source: https://habr.com/ru/post/901509/


All Articles