/** Recurses through super interfaces. 递归父类接口 */
 static void addInterfaces(List<Class<?>> eventTypes, Class<?>[] interfaces) {
   for (Class<?> interfaceClass : interfaces) {
     if (!eventTypes.contains(interfaceClass)) {
       eventTypes.add(interfaceClass);
       addInterfaces(eventTypes, interfaceClass.getInterfaces());
     }
   }
 }
 /**
  * Looks up all Class objects including super classes and interfaces. Should also work for
  * interfaces.
  */
 private List<Class<?>> lookupAllEventTypes(Class<?> eventClass) {
   synchronized (eventTypesCache) {
     List<Class<?>> eventTypes = eventTypesCache.get(eventClass);
     if (eventTypes == null) {
       eventTypes = new ArrayList<Class<?>>();
       Class<?> clazz = eventClass;
       while (clazz != null) {
         eventTypes.add(clazz);
         addInterfaces(eventTypes, clazz.getInterfaces());
         clazz = clazz.getSuperclass();
       }
       eventTypesCache.put(eventClass, eventTypes);
     }
     return eventTypes;
   }
 }