Search code examples
javajakarta-eeservlet-3.0generic-programming

Why does ServletContext.addListener use generic type?


Servlet API 3.0 provide the addListener method for ServletContext

<T extends EventListener> void addListener(T t);

See http://docs.oracle.com/javaee/7/api/javax/servlet/ServletContext.html#addListener-T- .

Why isn't this method defined as:

void addListener(EventListener listener);

Solution

  • I guess that's because EventListener is a tagging interface only - it doesn't have any methods, so having void addListener(EventListener listener); would be nonsense code - like "give me something that has no methods I can call".

    With declaring this as <T extends EventListener> void addListener(T t); it's clear to the implementor, that something more than simply an EventListener is needed here.