public < T extends ObjectAttachableListener > void removeObjectListener ( Class < ? > objectClass , long objectId , Class < T > listenerClass , T listener ) { synchronized ( objectListeners ) { if ( objectClass == null ) { return ; } Map < Long , Map < Class < ? extends ObjectAttachableListener > , Map < ObjectAttachableListener , ListenerManagerImpl < ? extends ObjectAttachableListener > > > > objectListener = objectListeners . get ( objectClass ) ; if ( objectListener == null ) { return ; } Map < Class < ? extends ObjectAttachableListener > , Map < ObjectAttachableListener , ListenerManagerImpl < ? extends ObjectAttachableListener > > > listeners = objectListener . get ( objectId ) ; if ( listeners == null ) { return ; } Map < ObjectAttachableListener , ListenerManagerImpl < ? extends ObjectAttachableListener > > classListeners = listeners . get ( listenerClass ) ; if ( classListeners == null ) { return ; } ListenerManagerImpl < ? extends ObjectAttachableListener > listenerManager = classListeners . get ( listener ) ; if ( listenerManager == null ) { return ; } classListeners . remove ( listener ) ; listenerManager . removed ( ) ; // Clean it up if ( classListeners . isEmpty ( ) ) { listeners . remove ( listenerClass ) ; if ( listeners . isEmpty ( ) ) { objectListener . remove ( objectId ) ; if ( objectListener . isEmpty ( ) ) { objectListeners . remove ( objectClass ) ; } } } } }
Removes an object listener .