private <E extends Event> T getValue(final E e) { if (getters.containsKey(e.getClass())) { final Getter<? extends T, ? super E> g = (Getter<? extends T, ? super E>) getters.get(e.getClass()); return g == null ? null : g.get(e); } for (final Entry<Class<? extends Event>, SerializableGetter<? extends T, ?>> p : getters.entrySet()) { if (p.getKey().isAssignableFrom(e.getClass())) { getters.put(e.getClass(), p.getValue()); return p.getValue() == null ? null : ((Getter<? extends T, ? super E>) p.getValue()).get(e); } } getters.put(e.getClass(), null); return null; }