Class EventClassComparator

java.lang.Object
org.apache.shiro.event.support.EventClassComparator
All Implemented Interfaces:
Comparator<Class>

public class EventClassComparator extends Object implements Comparator<Class>
Compares two event classes based on their position in a class hierarchy. Classes higher up in a hierarchy are 'greater than' (ordered later) than classes lower in a hierarchy (ordered earlier). Classes in unrelated hierarchies have the same order priority.

Event bus implementations use this comparator to determine which event listener method to invoke when polymorphic listener methods are defined:

If two event classes exist A and B, where A is the parent class of B (and B is a subclass of A) and an event subscriber listens to both events:

 @Subscribe
 public void onEvent(A a) { ... }

 @Subscribe
 public void onEvent(B b) { ... }
 

The onEvent(B b) method will be invoked on the subscriber and the onEvent(A a) method will not be invoked. This is to prevent multiple dispatching of a single event to the same consumer.

The EventClassComparator is used to order listener method priority based on their event argument class - methods handling event subclasses have higher precedence than superclasses.

Since:
1.3