Caner
Caner

Reputation: 59258

Java class with 2 generic parameters

I'm trying to crate my own thread safe event handling but I get E cannot be resolved to a type error on class decleration line below. How can I fix this?

Observers.java

public final class Observers<T extends EventHandler<E>> {

    private CopyOnWriteArrayList<T> mListeners = new CopyOnWriteArrayList<T>();

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

    /*...*/

    public void dispatchEvent(Object sender, E args) {
        /*...*/
    }
}

EventHandler.java

public interface EventHandler<E extends EventArgs> {
 /* ... */
}

Upvotes: 4

Views: 171

Answers (1)

Jon Skeet
Jon Skeet

Reputation: 1502806

You've only actually declared a single type parameter in Observers. Try this:

public final class Observers<E extends EventArgs, T extends EventHandler<E>> {

Note that it looks highly odd for your Observers class to declare its own nested EventHandler interface while implementing the outer one - if you really need both of those, I would suggest you rename one of them.

Upvotes: 12

Related Questions