src/main/java/com/seanchenxi/gwt/storage/client/StorageExt.java
private <T> void fireEvent(StorageChangeEvent.ChangeType changeType, StorageKey<T> key, T value, T oldVal, String data, String oldData) {
    UncaughtExceptionHandler ueh = GWT.getUncaughtExceptionHandler();
    if (handlers != null && !handlers.isEmpty()) {
      T oldValue = oldVal;
      if (oldValue == null && oldData != null && StorageChangeEvent.Level.OBJECT.equals(eventLevel)) {    
        try {
          oldValue = StorageUtils.deserialize(key.getClazz(), data);
        } catch (SerializationException e) {
          if (ueh != null)
            ueh.onUncaughtException(e);
          oldValue = null;
        }
      }

      final StorageChangeEvent event = new StorageChangeEvent(changeType, key, value, oldValue, data, oldData);
      for (StorageChangeEvent.Handler handler : handlers) {
        try{
          handler.onStorageChange(event);
        }catch(Exception e){
          if(ueh != null){
            ueh.onUncaughtException(e);
          }
        }
      }
    }
  }
private <T> void fireEvent(StorageChangeEvent.ChangeType changeType, StorageKey<T> key, T value, T oldVal, String data, String oldData) {
    UncaughtExceptionHandler ueh = GWT.getUncaughtExceptionHandler();
    if (handlers != null && !handlers.isEmpty()) {
      T oldValue = oldVal;
      if (oldValue == null && oldData != null && StorageChangeEvent.Level.OBJECT.equals(eventLevel)) {    
        try {
          oldValue = StorageUtils.deserialize(key.getClazz(), data);
        } catch (SerializationException e) {
          if (ueh != null)
            ueh.onUncaughtException(e);
          oldValue = null;
        }
      }

      final StorageChangeEvent event = new StorageChangeEvent(changeType, key, value, oldValue, data, oldData);
      for (StorageChangeEvent.Handler handler : handlers) {
        try{
          handler.onStorageChange(event);
        }catch(Exception e){
          if(ueh != null){
            ueh.onUncaughtException(e);
          }
        }
      }
    }
  }
private < T > void fireEvent ( StorageChangeEvent . ChangeType changeType , StorageKey < T > key , T value , T oldVal , String data , String oldData ) { UncaughtExceptionHandler ueh = GWT . getUncaughtExceptionHandler ( ) ; if ( handlers != null && ! handlers . isEmpty ( ) ) { T oldValue = oldVal ; if ( oldValue == null && oldData != null && StorageChangeEvent . Level . OBJECT . equals ( eventLevel ) ) { try { oldValue = StorageUtils . deserialize ( key . getClazz ( ) , data ) ; } catch ( SerializationException e ) { if ( ueh != null ) ueh . onUncaughtException ( e ) ; oldValue = null ; } } final StorageChangeEvent event = new StorageChangeEvent ( changeType , key , value , oldValue , data , oldData ) ; for ( StorageChangeEvent . Handler handler : handlers ) { try { handler . onStorageChange ( event ) ; } catch ( Exception e ) { if ( ueh != null ) { ueh . onUncaughtException ( e ) ; } } } } }
Fire {@link StorageChangeEvent}
Fire {